GDB:重新运行程序直到出现故障,沿途回答提示

GDB: Re-run program until it faults, answering prompts along the way

问题


我正在尝试 automatically debug a 我正在审查的程序,其中有一个很小但真实的机会(即:10,000 机会之一)由于已知的原因而发生崩溃漏洞。我与另一位工程师争辩说它严重到足以解决,所以我需要实际导致崩溃发生以证明花时间修复它是合理的。为了加快测试速度,我计划编写一个脚本,让应用程序 运行 在 GDB 中运行几天,如果需要的话,直到它崩溃。


先前的研究


I've found out how to run simple applications through GDB until segfaulting via a separate answer on Whosebug,但我需要稍微扩展一下问题。所以,我知道我可以重复 运行 一个程序,直到它通过以下方式崩溃:


set pagination off
break exit
commands
run
end

问题


我需要做的是弄清楚如何发出某些命令。在我的程序 运行s 几秒钟后,它会要求用户输入(通过 stdin[0,100] 范围内的数字,然后点击 ENTER。我希望它在第一次迭代时输入 0ENTER,在第二次迭代时输入 1ENTER迭代等。我意识到如果我向应用程序添加命令行参数,这会容易得多,但此时我不允许更改它,必须依赖它提供的交互操作模式。


问题


我如何创建一个命令来使用 GDB 自动生成这些 keystrokes/patterns?我猜我可以编写某种 GDBINIT 脚本,但我主要以交互方式使用 GDB 来获取回溯、分析内存等,并且不太熟悉此类自动化任务。

谢谢。

因为您的程序从 stdin 读取其输入,所以您的任务很简单。只需按如下方式创建输入文件:

1
2
3
...

然后,您的 gdb 命令序列更改其 run 阶段以包含输入文件(比如 input.txt):

set pagination off
break exit
commands
run < input.txt
end