【问题标题】:How to map $eip in gdb to output of objdump -d?如何将 gdb 中的 $eip 映射到 objdump -d 的输出?
【发布时间】:2012-09-12 16:29:30
【问题描述】:

我有一个不完整的堆栈跟踪,它在一个已知的库(linux i686 架构)处停止。为了确定最后调用的函数,我试图将 $eip 作为 gdb 的输出映射到由“objdump -d library.so”生成的文件中的地址。 我想我也许可以使用 gdb 中“信息共享”的 From 地址输出以及 $eip 来计算偏移量,然后我可以将其转换为来自 objdump -d 输出的反汇编文本部分的偏移量? 不确定这种方法是否明智,但在一个带有共享库的简单测试工具应用程序中尝试它并没有在正确的函数中给我一个地址。 非常感谢任何帮助。

【问题讨论】:

    标签: gdb objdump


    【解决方案1】:

    我认为我可以使用 gdb 中“信息共享”的 From 地址输出,以及 $eip 来计算偏移量,然后我可以将其转换为来自 objdump 的反汇编文本部分的偏移量 - d 输出?

    是的,这正是你需要做的。

    GDB 显示中的From 地址告诉您共享库的.text 部分的位置。

    readelf -S foo.so | grep '\.text' 会告诉你.textfoo.so 本身中的偏移量。从另一个中减去一个,您将获得该共享库的 重定位(它将是页面对齐的)。

    现在从 GDB 中取出 $eip,减去重定位,您将获得一个与 nmobjdump 的输出匹配的地址,用于 foo.so

    不过,GDB 内部已经完成了上述所有步骤。如果它无法推断出 $eip 最终进入了哪个函数,那么您不应期望手动执行这些步骤会产生更好的结果。

    【讨论】:

      猜你喜欢
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      相关资源
      最近更新 更多