为什么在ARM二进制文件上显示readelf是一个奇数入口点地址?

时间:2015-01-23 13:05:42

标签: arm elf

我在Odroid-XU3上用gcc / g ++版本4.8.2和clang版本3.5编译了一个C ++ HelloWorld。我还写了一个C HelloWorld进行比较。

g++ -static -o HelloWorld hello.cc

readelf -h HelloWorld显示以下入口点地址:

HelloWorld: 0x8be5 HelloClang: 0x8c45 HelloC: 0x88b5

这些是奇数地址。 Thumb有奇数地址,所以这与Thumb有关吗?

此外,objdump -lSd HelloWorld_start显示0x8be4符号,该符号看起来像“正确”地址。

为什么要显示这两个工具的不同地址?

1 个答案:

答案 0 :(得分:2)

是的地址很奇怪,因为它们是Thumb功能,这是一个简单的问题,但是为什么两个工具报告的方式与我不同是一个很好的问题。

readelf故意不使用BFD(与objdump不同),主要用于验证其他工具。

Here

  

readelf和objdump之间的区别:两个程序都是   能够显示ELF格式文件的内容,为什么呢   binutils项目有两个文件翻转程序吗?

     

原因是   objdump通过世界的BFD过滤器看到一个ELF文件;如果是BFD   有一个错误,例如,它不同意机器常数   e_flags,那么它将保持在内部的可能性很大   是一致的。链接器将其视为BFD方式,objdump将其视为BFD   方式,GAS认为它是BFD方式。需要一种工具来寻找   文件实际上说的是什么。

     

这就是readelf计划的原因   没有链接到BFD库 - 它作为一个独立的存在   程序,以帮助验证BFD的正确工作。

     

还有   readelf可以提供有关ELF文件的更多信息的情况   比objdump提供的。特别是它可以显示DWARF   调试信息(目前)objdump不能。