assembly - 使用 gdb 比较汇编跟踪

标签 assembly gdb arm reverse-engineering trace

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

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

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

最佳答案

我想到了一些想法。

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

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

此外,我依稀记得以前已经这样做过,您可以搜索 gdb wiki 或者邮件列表文件。

关于assembly - 使用 gdb 比较汇编跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16845187/

相关文章:

assembly - 为什么 lw 指令的第二个参数同时采用偏移量和 regSource?

macos - 基本程序集不能在Mac(x86_64 + Lion)上运行?

c - 在 GBA tile 模式下将单字节写入 VRAM 的意外结果,值也写入下一个或前一个字节

c - STM32如何获取上次复位状态

c++ - 如何在 armLinux 中为多播设置默认 HopLimit 值?

assembly - 如何在 64 位 NASM 中使用 malloc 和 free?

c++ - unsigned int 到 unsigned long long 定义明确吗?

gdb - 在 gdb 中为文件添加自己的符号

c - 缓冲区溢出,使用 GDB 进行堆栈指针操作

c++ - 添加断点并运行程序时无法访问地址处的内存