来自GDB和objdump的源交错反汇编

时间:2015-10-05 14:15:27

标签: gdb disassembly objdump

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

对于-O0代码,两个程序的输出看起来都一样。但是,对于优化的代码,GDB的反汇编更有用,因为它一次性收集所有那些分散的指令,因此很容易看到该源代码生成的内容(显然,在这种情况下,指令地址不会是连续的。

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

TIA。

1 个答案:

答案 0 :(得分:2)

我不相信有任何方法可以更改objdump的行为,但是,最近在gdb添加了一项功能,可以按指令顺序显示交错的源代码。此功能非常新,但尚未在任何版本中使用,但您可以看到修补程序herehere

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