【问题标题】:Source-interleaved disassembly from GDB and objdump来自 GDB 和 objdump 的源交错反汇编
【发布时间】:2015-10-05 14:15:27
【问题描述】:

在我的一次(FWIW,ARM)调试会话中,我注意到来自 GDB 和 objdump -S 的源代码交错反汇编输出以一种有趣的方式不同:objdump 似乎跳过单个/一组指令并显示源代码行从中生成这些指令(指令顺序)。另一方面,GDB 反汇编似乎会跳过源代码行,并列出从该源代码行生成的所有汇编指令(源代码顺序)。

对于-O0 代码,两个程序的输出看起来相同。但是,对于优化的代码,GDB 的反汇编更有帮助,因为它将所有那些原本分散的指令收集在一个地方,因此很容易看到单独的源代码行生成了什么(显然,在这种情况下,指令地址不会是连续的)。

我认为这两种形式对它们自己都有帮助。我的问题是这两个程序的显示行为是否是可配置的。 IOW,我可以告诉 GDB 像 objdump 一样显示,还是告诉 objdump 像 GDB 一样显示?另外,是否有其他工具可以执行此壮举?

TIA。

【问题讨论】:

    标签: gdb disassembly objdump


    【解决方案1】:

    我不认为有任何方法可以改变objdump 的行为,但是,最近gdb 添加了一项功能,可以按指令顺序显示交错的源代码。这个功能太新了,还没有发布,但是你可以看到补丁herehere

    使用这些补丁,旧标志 /m 仍按程序源代码行顺序反汇编,而新标志 /s 按指令顺序反汇编。长期计划是删除 /m,因为它在某些极端情况下已损坏,并且被认为不值得修复。

    【讨论】:

    • 谢谢。这是否意味着 GDB 的源代码交错反汇编能力将完全消失?这会让我担心。
    • 不,/m 将在某一天(可能从现在起很长一段时间)被删除,但 /s 将保留。你还是得到源+指令,只是/s按指令地址排序。
    • 那可太糟糕了。据我所知,/m 是获得按源排序的反汇编的唯一方法(证明非常有用,即使它确实有一些边缘情况)。我希望从现在开始真的,真的,很长一段时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    相关资源
    最近更新 更多