2

我有一个没有源的共享对象文件。我对输入特定功能时会发生什么感兴趣。当在某种情况下(当有 Wifi 连接可用时)进入该功能时,程序会以某种方式做出反应;在不同的情况下(没有可用的连接),它的行为方式不同。我试图确定程序中正在测试外部情况(Wifi 连接的存在)的点,目的是修补共享对象文件以绕过此检查。

使用gdb,我可以手动跟踪程序的执行。但是,手动找到执行路径不同的点是很痛苦的。有没有办法要求gdb存储正在执行的机器指令序列(以及可选的更多状态,如寄存器内容)并在两种情况下区分序列以更容易地确定在哪个点检查外部条件?

相关的似乎是该gdb record功能,但是我不能使用它,因为该程序在 ARM 上运行并且此目标不支持录制。但是,我并不是在寻找任何形式的硬件支持,因为性能根本不重要——我只需要一种方法来要求gdb自动记录所执行的指令,就像我通过遵循程序执行与ni. 这样的事情存在吗?

4

1 回答 1

2

一些想法浮现在脑海。

您可以通过在循环中调用“stepi”来自动执行此操作,并使用日志功能来记录 gdb 的输出。然后你可以区分这两个日志文件。

或者,您可以从 Python 中执行相同的操作,这可能会让您更好地控制生成的数据的格式。

另外,我隐约记得以前有人这样做过,您可以搜索 gdb wiki 或邮件列表档案。

于 2013-05-31T02:07:33.857 回答