为什么readelf将“ System V”显示为我的操作系统而不是Linux?


10

我用gcc编译了一个小型C程序(两行代码),以尝试了解ELF文件格式。readelf -h在目标文件上做一个,我在标题中:

OS/ABI:                            UNIX - System V 

我正在使用Fedora,所以为什么不使用Linux?

编辑:我编译

int main(){
  int x = 0;
  x++;
}

gcc -o main.o -c main.c。我的gcc版本是

gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4) 

请向我们展示i)您编译的代码ii)输出gcc --version和iii)用于编译它的确切命令。
terdon

我已经相应地编辑了问题。
alex_reader 2014年

我只是readelf -h /bin/ls在debian gnu / linux上做过。这也表明OS/ABI: UNIX - System V。我的猜测是,ABI用于多个内核,而不仅仅是Linux。我也知道linux支持多个ABI。
ctrl-alt-delor 2014年

6
维基百科说,它[在ELF头的OSABI场]通常设置为0的SysV]不管目标平台
斯特凡Chazelas

1
该字段指示ELF文件是否使用任何特定于OS的扩展名,默认值为0。此处有更详细的描述(位于EI_OSABI)。
莱亚兹2014年

Answers:


8

在不同平台上的ELF可执行文件之间几乎没有差异。“ UNIX-系统V”是共同点;系统VELF格式的来源。对应的数值为0。该值表示可执行文件不使用任何特定于操作系统的扩展名。至少Debian GNU / Linux将GCC / binutils配置为生成默认情况下将此字段设置为0的可执行文件。


3
ELF标准说0表示“ ELFOSABI_NONE 0没有扩展名或未指定” sco.com/developers/gabi/2003-12-17/ch4.eheader.html
Ciro Santilli冠状病毒审查六四事件法轮功
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.