2011-12-07 44 views
57

我通常與運行我的程序。GDB與管道輸入(未參數)調試

如果這只是一個命令的說法,我可以做打開GDB:

gdb ./vuln_prog 
run $(perl -e 'print "A"x200') 

然而,我的方案是不是一個命令參數,而是輸入(?STDIN)。我如何在gdb中調試這個?我嘗試了一堆選項,但似乎沒有任何工作。

我通常只是在進程上運行gdb,當它提示用戶輸入時,輸入它,但是我不想輸入「A」。我想輸入來自\ x00- \ xff的所有字符,我無法輸入。

+0

爲什麼使用'gets'?我的意思是有時它是可以接受的(比如,如果你只是寫一個快速程序來測試某些東西,或者程序只能用可信任的輸入運行),但我很好奇。 – flarn2006

+0

這不是我的代碼。這是一個有趣的逆向工程挑戰,提供代碼。 – mandreko

+0

噢好吧。被「故意使用」*是因爲它容易受到攻擊,就像是解決挑戰的一部分一樣。 – flarn2006

回答

77
gdb ./vuln_prog 
run < filename_with_input 
+0

非常感謝你。我試圖直接運行輸入,在那裏我應該考慮將perl代碼打印到文件中,然後輸入它。這非常有效。 – mandreko

+1

是否有'lldb'等價物? –

+1

@ThomasAhle對於lldb相當http://stackoverflow.com/questions/29861242/cannot-get-mac-os-x-lldb-process-to-read-the-stdin – jernkuan