GDB:重新运行程序直到出现故障,沿途回答提示
GDB: Re-run program until it faults, answering prompts along the way
问题
我正在尝试 gdb automatically debug a c 我正在审查的程序,其中有一个很小但真实的机会(即: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。我希望它在第一次迭代时输入 0
、ENTER,在第二次迭代时输入 1
、ENTER迭代等。我意识到如果我向应用程序添加命令行参数,这会容易得多,但此时我不允许更改它,必须依赖它提供的交互操作模式。
问题
我如何创建一个命令来使用 GDB 自动生成这些 keystrokes/patterns?我猜我可以编写某种 GDBINIT
脚本,但我主要以交互方式使用 GDB 来获取回溯、分析内存等,并且不太熟悉此类自动化任务。
谢谢。
因为您的程序从 stdin
读取其输入,所以您的任务很简单。只需按如下方式创建输入文件:
1
2
3
...
然后,您的 gdb 命令序列更改其 run
阶段以包含输入文件(比如 input.txt
):
set pagination off
break exit
commands
run < input.txt
end
问题
我正在尝试 gdb automatically debug a c 我正在审查的程序,其中有一个很小但真实的机会(即: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。我希望它在第一次迭代时输入 0
、ENTER,在第二次迭代时输入 1
、ENTER迭代等。我意识到如果我向应用程序添加命令行参数,这会容易得多,但此时我不允许更改它,必须依赖它提供的交互操作模式。
问题
我如何创建一个命令来使用 GDB 自动生成这些 keystrokes/patterns?我猜我可以编写某种 GDBINIT
脚本,但我主要以交互方式使用 GDB 来获取回溯、分析内存等,并且不太熟悉此类自动化任务。
谢谢。
因为您的程序从 stdin
读取其输入,所以您的任务很简单。只需按如下方式创建输入文件:
1
2
3
...
然后,您的 gdb 命令序列更改其 run
阶段以包含输入文件(比如 input.txt
):
set pagination off
break exit
commands
run < input.txt
end