【发布时间】:2014-11-08 00:07:42
【问题描述】:
-
ELF中的SHT_NULL部分的用途是什么? - 是被操作系统引用还是被加载器引用?
- 此部分的大小是多少?
- 和NULL指针有关系吗?
- 另外,为什么此部分在节段映射中没有条目?
来自 ELF 规范:
SHT_NULL :该值将节标题标记为非活动;它没有关联的部分。节标题的其他成员具有未定义的值。
【问题讨论】:
标签: elf
ELF 中的SHT_NULL 部分的用途是什么?来自 ELF 规范:
SHT_NULL :该值将节标题标记为非活动;它没有关联的部分。节标题的其他成员具有未定义的值。
【问题讨论】:
标签: elf
SHT_NULL 的一个“用途”是它对于第一个头表条目(索引 0,名为 SHN_UNDEF)是强制性的,这很神奇。
这记录在System V ABI Update(推荐by the LSB):
如果节数大于或等于 SHN_LORESERVE (0xff00),则 e_shnum 的值为 SHN_UNDEF (0),节头表条目的实际数量包含在索引 0 处节头的 sh_size 字段中(否则,初始条目的 sh_size 成员包含 0)。
和:
保留其他部分类型值。如前所述,索引 0 (SHN_UNDEF) 的节标题存在,即使索引标记了未定义的节引用。此条目包含以下内容。
后跟一个表,指定在这种特殊情况下,节标题的每个条目的含义。特别是,sh_type 必须是 SHT_NULL。
从上面看,这第一部分似乎存在允许对大量部分进行编码,但我还没有测试内核和编译器支持。
【讨论】:
elf 中 SHT_NULL 部分的作用是什么?
它用作sentinel。
是被操作系统引用还是被加载器引用?
没有。
这个部分的大小是多少?
零(您可以在readelf -WS a.out 输出中看到)[但见下文]。
为什么此部分在节段映射中没有条目?
因为该部分不存在于任何片段中。
通常,每个 ELF 文件的第一部分的类型为 SHT_NULL。理论上,后链接工具也可以将 some other 部分的类型设置为SHT_NULL(例如,如果不再需要其数据),并且所有后续工具都应该忽略该部分.这并不常见。
【讨论】: