Altkuhl 发表于 2012-05-06 20:57

求 X86 Linux gcc ABI 的详细文档

我需要看懂 X86 Linux 可执行文件(ELF文件)的二进制内容。
请问需要寻找什么资料?**?
是不是需要 X86 Linux gcc ABI 的详细文档?怎么得到?
还需要别的什么资料?
跪求。
谢谢。

Altkuhl 发表于 2012-05-06 22:07

贴子中忘了说了,我的 X86 Linux 是 Redhat Enterprise, 并且有两个不同的version的server。
具体说,就是通过以下指令看的version,
cat/etc/redhat-release
有的server是4.6,有的server是5.3。

EricFisher 发表于 2012-05-07 11:12

google一下 x86 ABI

Altkuhl 发表于 2012-05-07 22:10

我们的serever有些是这个版本:
      Red Hat Enterprise Linux AS release 4 (Nahant Update 6)
      gcc version 3.4.6 20060404 (Red Hat 3.4.6-9)
另一些是这个版本:
      Red Hat Enterprise Linux Server release 5.3 (Tikanga)
      gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)

我有一个C程序。如果我在4.6版server上编译,它可以在5.3版server上正确运行。
但是如果我在5.3版server上编译,它在4.6版server上就无法运行,只给出一下提示:
      Floating exception
我查看了两个可执行文件,发现里面都包含GLIBC_2.2.5。

我需要在二进制的级别理解为什么在高版本Linux编译出的程序在低版本Linux中不能运行。于是我从gnu.org下载了以下文件:
      System V Application Binary Interface
      AMD64 Architecture Processor Supplement
      Draft Version   0.99.5
      Edited by       Michael Matz, Jan Hubiˇcka, Andreas Jaeger, Mark Mitchell
      September 3, 2010

但是这是个很大的文件,有128页,而且我没有理解ELF文件二进制码的经验。我不知道这是不是我所需要的正确的文件。

大家可以不可以给我建议?
1. 短期内,请问,尽管它们都拥有GLIBC_2.2.5,为什么在Linux5.3编译出的程序在Linux4.6中不能运行?
2. 从长远看,我学习并掌握ELF文件二进制格式的正确途径是什么?我需要那些资料来学习这个领域?

谢谢。

EricFisher 发表于 2012-05-08 14:52

浮点异常错误,先查查出错的位置,看看是不是应用程序本身的错误。

可以通过readelf和objdump命令帮助了解ELF文件格式。

Altkuhl 发表于 2012-05-08 20:59

谢谢。我用readelf开始研究了一下ELF文件的格式,但是还没开始用objdump,接下来会用。:-)

Perlvim 发表于 2012-05-11 10:52

gcc 每个版本都比上一个版本对语法的要求更严格。Linux 每个版本都是向下兼容的。硬件架构可能有32位到64位的跨越,尤其是浮点计算,64位体系结构的指令集和32位有较大不同,有了很多扩展。二进制接口中涉及到指令集的部分可能因为指令集的升级出现冲突。建议仔细阅读相关文档。

fayfarn 发表于 2012-12-17 10:59

很遗憾地告诉你,Linux的二进制兼容性很差。

所以,你就用老版本的编译器去编译吧。。。。。。。。。。


bluesea147 发表于 2012-12-17 12:52

看看ELF File Format Specification吧
页: [1]
查看完整版本: 求 X86 Linux gcc ABI 的详细文档