【发布时间】:2016-10-10 09:42:03
【问题描述】:
问题
我试图让gdb 自动调试我正在审查的c 程序,其中有一个小但真实的机会(即:10,000 机会中的一个)由于已知的漏洞。我与另一位工程师争辩说它足够严重,可以解决,所以我需要实际导致崩溃发生,以证明花时间修复它是合理的。为了加快测试速度,我计划编写一个脚本,让应用程序在 GDB 中运行几天(如果需要),直到它崩溃。
先前的研究
I've found out how to run simple applications through GDB until segfaulting via a separate answer on StackOverflow,但我需要稍微扩展一下问题。所以,我知道我可以反复运行一个程序,直到它通过以下方式崩溃:
set pagination off
break exit
commands
run
end
问题
我需要做的是弄清楚如何发出某些命令。在我的程序运行几秒钟后,它会要求用户输入(通过stdin)[0,100] 范围内的一个数字,然后点击ENTER。我希望它在第一次迭代时输入0,ENTER,在第二次迭代时输入1,ENTER,等等。我意识到这会很重要如果我向应用程序添加命令行参数会更容易,但此时我不能更改它,必须依赖它提供的交互操作模式。
问题
如何使用 GDB 创建一个命令来自动生成这些击键/模式?我猜我可以编写某种GDBINIT 脚本,但我主要以交互方式使用 GDB 来获取回溯、分析内存等,并且不太熟悉此类自动化任务。
谢谢。
【问题讨论】:
-
请感谢 :)
-
如果程序只是从
stdin读取,你为什么不直接重定向一个文件呢?
标签: gdb c c linux debugging gdb gdbinit