为什么在ARM二进制文件上显示readelf是一个奇数的入口点地址? 我在Google/G++4.4.2版和CLAN 3.5版上在ODROID-XU3上编译了一个C++ HeloWord。我还写了一个C HelloWorld用于比较

为什么在ARM二进制文件上显示readelf是一个奇数的入口点地址? 我在Google/G++4.4.2版和CLAN 3.5版上在ODROID-XU3上编译了一个C++ HeloWord。我还写了一个C HelloWorld用于比较,arm,elf,Arm,Elf,g++-static-o HelloWorld hello.cc readelf-h HelloWorld显示以下入口点地址: HelloWorld:0x8be5 HelloClang:0x8c45 HelloC:0x88b5 这些地址很奇怪。Thumb有奇怪的地址,这和Thumb有关吗 此外,objdump-lSd HelloWorld在0x8be4处显示\u start符号,该符号看起来像是“右”地址 为什么要将这两个工具显示为不同的地址?是的地址很奇怪,因为它们是拇指函数,这是一个简单的问

g++-static-o HelloWorld hello.cc

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

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

这些地址很奇怪。Thumb有奇怪的地址,这和Thumb有关吗

此外,
objdump-lSd HelloWorld
0x8be4
处显示
\u start
符号,该符号看起来像是“右”地址


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

是的地址很奇怪,因为它们是拇指函数,这是一个简单的问题,但是为什么两个工具对我的报告不同是一个好问题

readelf
on-purpose不使用BFD(与objdump不同),主要用于验证其他工具

:

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

原因是 objdump通过世界上的BFD过滤器看到一个ELF文件;如果BFD 有一个bug,比如说,它对机器常数不一致 e_标志,那么它很可能会留在内部 始终如一。链接器以BFD的方式看到它,objdump以BFD的方式看到它 加油站,加油站用BFD的方式。需要一个工具去寻找 看看文件上到底说了些什么

这就是为什么readelf程序 不与BFD库链接-它作为独立库存在 帮助验证BFD正确工作的程序

还有 readelf可以提供有关ELF文件的更多信息的情况 而不是由objdump提供。特别是它可以显示侏儒 (目前)objdump无法提供的调试信息

相关的: