【问题标题】:Using gdb to compare assembly traces使用 gdb 比较程序集跟踪
【发布时间】:2013-05-26 13:27:42
【问题描述】:

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

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

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

【问题讨论】:

  • 用objdump反汇编没用?
  • auselen:我想区分程序运行时正在执行的指令序列(重要的是,包括所遵循的实际分支),而不是区分静态汇编序列。

标签: assembly gdb arm reverse-engineering trace


【解决方案1】:

我想到了一些想法。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-15
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多