gdb - 使用管道输入(不是参数)进行调试

man*_*eko 70 gdb pipe

我通常运行我的程序:

perl -e 'print "A"x200' | ./vuln_prog
Run Code Online (Sandbox Code Playgroud)

stdin由gets()C++中的函数使用.

如果这只是一个命令参数,我可以通过执行以下操作打开gdb:

gdb ./vuln_prog
run $(perl -e 'print "A"x200')
Run Code Online (Sandbox Code Playgroud)

但是,我的场景不是命令参数,而是输入(STDIN?).我如何在gdb中调试它?我尝试过很多选项,但似乎没什么用.

我通常只是在进程上运行gdb,当它提示用户输入时,输入它,但是我不想只键入"A".我想输入来自\ x00-\xff的所有字符,我无法输入.

zed*_*xff 92

gdb ./vuln_prog
run < filename_with_input
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法在不写入文件的情况下进行管道传输? (4认同)
  • @Shinlos我仍在试图弄清楚这个语法是如何工作的,但我相信,如果你试图将exploit.py的输出通过管道输入到您当前正在 gdb 中单步执行的程序。 (3认同)
  • 有一个`lldb`等价? (2认同)
  • @ThomasAhle 对于lldb等效http://stackoverflow.com/questions/29861242/cannot-get-mac-os-x-lldb-process-to-read-the-stdin (2认同)
  • @iAdjunct 我在另一个问题中看到,您可以使用 bash 语法,即“run &lt; &lt;(bunzip file.bz2)” (2认同)