繁体   English   中英

不同类型的目标文件

[英]Different types of object files

ELF 文档中的e_type列出了以下可用的目标文件类型:

Name       Value     Meaning
ET_NONE    0         No file type
ET_REL     1         Relocatable file
ET_EXEC    2         Executable file
ET_DYN     3         Shared object file
ET_CORE    4         Core file
ET_LOPROC  0xff00    Processor-specific
ET_HIPROC  0xffff    Processor-specific

我在哪里可以详细了解这些文件类型是什么? 例如,我从来没有听说过“特定于处理器”的文件:有什么例子呢?


在执行$ xxd -l 32 /bin/ls ,对象类型为 ET_DYN:

00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000  .ELF............
00000010: 0300 <-- object type = 3 or "shared object file"

为什么ls不被视为可执行文件,而是共享对象? (编者注:这部分是为什么 GCC 根据文件创建共享对象而不是可执行二进制文件的readelf -h /bin/ls 此外, readelf -h /bin/ls是解码 ELF 标头的更简单方法,包括 ELF 类型)


最后,什么是core文件? 这像堆栈跟踪吗? http://man.netbsd.org/core.5使用C从core dump中获取导致segmentation fault的地址

(编者注:这部分是什么是 Linux 中的核心转储文件?它提供什么信息?不幸的是,这是 1 个帖子中的 3 个问题,因此在回答非重复部分时不能轻易标记为重复部分)

你的问题有两个部分:

特定于处理器的类型

如果未来的 CPU 系列想要定义新类型的文件,这些将作为“扩展点”。 没有一个主要的处理器系列使用过这个范围内的东西,所以即使稍微搜索一下,我也找不到任何例子。

lsET_DYN

ET_DYN常量仅表示该对象是运行时可重定位的。 传统上,这已用于共享对象 ( .so ),但对于 glibc 中的位置无关可执行文件 (PIE),它们重用与共享对象相同的编译器和加载器代码来进行运行时重定位,从而导致这种混乱的情况其中可执行文件被报告为共享对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM