不同类型的目标文件
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
不被视为可执行文件,而是共享对象? (编者注:这部分是 的副本另外,readelf -h /bin/ls
是一种更简单的解码 ELF 头的方法,包括 ELF 类型)
最后,什么是 core
文件?这像堆栈跟踪吗? http://man.netbsd.org/core.5, .
(编者注:这部分是 What is a core dump file in Linux? What information does it provide? 的重复部分。不幸的是,这是 1 个 post 中的 3 个问题,因此在回答非重复部分时不容易被标记为重复)
您的问题分为两部分:
Processor-specific 类型
如果未来 CPU 家族想要定义一种新的文件类型,这些将作为“扩展点”保留下来。 None 的主要处理器系列曾经使用过该范围内的东西,因此即使进行一些搜索也没有我能想出的例子。
ls
是 ET_DYN
ET_DYN
常量只是表示对象是runtime-relocatable。传统上,这已用于共享对象 (.so
),但对于 glibc 中的 Position-Independent 可执行文件 (PIE),它们重用了与共享对象相同的编译器和加载程序代码来执行 runtime-relocation, 导致可执行文件被报告为共享对象的混乱情况。
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
不被视为可执行文件,而是共享对象? (编者注:这部分是 readelf -h /bin/ls
是一种更简单的解码 ELF 头的方法,包括 ELF 类型)
最后,什么是 core
文件?这像堆栈跟踪吗? http://man.netbsd.org/core.5,
(编者注:这部分是 What is a core dump file in Linux? What information does it provide? 的重复部分。不幸的是,这是 1 个 post 中的 3 个问题,因此在回答非重复部分时不容易被标记为重复)
您的问题分为两部分:
Processor-specific 类型
如果未来 CPU 家族想要定义一种新的文件类型,这些将作为“扩展点”保留下来。 None 的主要处理器系列曾经使用过该范围内的东西,因此即使进行一些搜索也没有我能想出的例子。
ls
是 ET_DYN
ET_DYN
常量只是表示对象是runtime-relocatable。传统上,这已用于共享对象 (.so
),但对于 glibc 中的 Position-Independent 可执行文件 (PIE),它们重用了与共享对象相同的编译器和加载程序代码来执行 runtime-relocation, 导致可执行文件被报告为共享对象的混乱情况。