使用fixups反汇编.o文件

时间:2015-07-07 13:41:38

标签: assembly objdump

我试过了

objdump -d myfile.o > myfile.lis

生成的输出在有链接时间或加载时间的地方都为零" fixup"在编译的代码中。例如,输出的一行是:

1ab5:   0f 57 2d 00 00 00 00    xorps  0x0(%rip),%xmm5

0x0(%rip)实际上是对同一个.o文件中某个常量的引用,但是反汇编没有给出任何提示。 另一行是

1934:   e8 00 00 00 00          callq  1939 <garbage>

这更令人沮丧。它实际上是对另一个模块中的命名函数的调用。该函数不是当前模块的偏移量1939(如反汇编所示),并且不是objdump产生的偏移量1939的巨大垃圾表示,我在复制时用“垃圾”一词替换。

是否有其他工具或其他使用objdump的方法,它将使用同一.o文件的其他部分的信息来为.o文件中的这些行提供正确的反汇编?或者我以某种方式安装了错误版本的objdump(相对于生成.o文件的编译器)和正确版本的objdump会起作用吗?

编辑以响应stakx的评论,我用一个包含

的简单文件重新编写测试
void tiny() { fun(0); }

并使用

编译
gcc -c tiny.c

然后

objdump -d tiny.o

产生

0000000000000000 <tiny>:
   0:   55                      push   %rbp
   1:   48 89 e5                mov    %rsp,%rbp
   4:   bf 00 00 00 00          mov    $0x0,%edi
   9:   b8 00 00 00 00          mov    $0x0,%eax
   e:   e8 00 00 00 00          callq  13 <tiny+0x13>
  13:   c9                      leaveq 
  14:   c3                      retq   

这与更复杂的例子中看到的问题完全相同(在解析对foo的调用时忽略了修正)。

0 个答案:

没有答案