我有一个共享对象文件,我没有源代码。我对进入特定功能时会发生什么感兴趣。在某种情况下进入此功能时(当有可用的Wifi连接时),程序会以某种方式作出反应;在不同的情况下(没有连接可用),它的行为方式不同。我正在尝试确定程序中正在测试外部情况(存在Wifi连接)的点,目的是修补共享对象文件以绕过此检查。
使用gdb
,我可以手动执行程序。但是,手动找到执行路径不同的点是很痛苦的。是不是有办法让gdb
存储正在执行的机器指令序列(以及可选的更多状态,如寄存器内容),并在两种情况下区分序列以更容易地确定在哪一点正在检查外部条件?
相关的东西似乎是gdb record
功能,但我不能使用它,因为程序在ARM上运行并且此目标不支持录制。但是,我不是在寻找任何形式的硬件支持,因为性能根本不重要 - 我只需要一种方法让gdb
自动记录执行的指令,就像我要做的那样通过使用ni
执行程序来手动执行。有这样的事吗?
答案 0 :(得分:2)
想到了一些想法。
您可以通过在循环中调用“stepi”来自动执行此操作,并使用日志记录功能记录gdb的输出。然后你可以区分两个日志文件。
或者,你可以用Python做同样的事情,这可能会让你更好地控制你生成的数据的格式。
另外,我模糊地回忆起之前已经完成的事情,您可以搜索gdb wiki或邮件列表档案。