我有一个共享对象文件,但没有其源代码。我对进入特定功能时会发生什么感兴趣。当在某种情况下(有Wifi连接时)进入该函数时,程序会以某种方式使用react;在不同的情况下(没有可用的连接),它的行为方式不同。我试图确定程序中正在测试外部情况(Wifi 连接是否存在)的点,目的是修补共享对象文件以绕过此检查。
使用gdb
,我可以手动跟踪程序的执行。然而,手动找出执行路径的不同点是一件很痛苦的事情。有没有办法让 gdb 存储正在执行的机器指令序列(以及可选的更多状态,例如寄存器内容)并区分两种情况下的序列,以便更容易地确定正在检查外部条件的哪一点?
相关的东西似乎是gdb record
功能,但是我无法使用它,因为该程序在ARM上运行并且该目标不支持记录。但是,我并不是在寻找任何形式的硬件支持,因为性能根本不重要——我只需要一种方法来要求 gdb 自动记录所执行的指令,就像我会通过使用 ni
跟踪程序执行来手动完成。存在这样的事情吗?
最佳答案
我想到了一些想法。
您可以通过在循环中调用“stepi”来自动执行此操作,并使用日志记录功能来记录 gdb 的输出。然后您可以比较这两个日志文件。
或者,您可以在 Python 中执行相同的操作,这可能会让您更好地控制生成的数据的格式。
此外,我依稀记得以前已经这样做过,您可以搜索 gdb wiki 或者邮件列表文件。
关于assembly - 使用 gdb 比较汇编跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16845187/