ELF段标识
ELF section identification
在 ELF executable 文件中,我用零值字节重写了所有节名称。即使这样,文件也可以正确链接和执行。 OS 如何识别文件中的各个部分,如符号-table 等?我的印象是部分名称用于此目的。一个相关的问题是,那么节名有什么用?
I over-wrote all the section names ...
... the file can be linked ... correctly.
与 32 位 Windows 中使用的目标文件不同,如果不使用链接描述文件,ELF 目标文件中的部分名称将被忽略。
每个“PROGBITS”部分都包含指定该部分是否可写、可执行的标志and/or甚至不是图像的一部分(调试信息)。
(其实Windows使用的object文件也有这样的flags,但是一般设置为0,section name用来区分code和data sections。)
对于其他节类型(例如符号表),很清楚无论如何必须如何处理它们。
... the file can be ... executed correctly.
对于可执行文件和共享库,无论如何都会忽略这些部分。相反,使用文件的“程序头”。
“程序头”告诉OS文件中的某个地址范围必须加载到内存中。一个“程序头”可能涵盖多个部分。而“程序头”是没有名字的
示例:
Sections:
Name Address Offset in file Length
.text 0x10100 0x100 0x30 read-only
.rodata 0x10130 0x130 0x20 read-only
.data 0x20250 0x150 0x10 read-write
.sdata 0x20260 0x160 0x10 read-write
Program headers:
Address Offset in file Length
0x10100 0x100 0x50 read-only
0x20250 0x150 0x20 read-write
在 ELF executable 文件中,我用零值字节重写了所有节名称。即使这样,文件也可以正确链接和执行。 OS 如何识别文件中的各个部分,如符号-table 等?我的印象是部分名称用于此目的。一个相关的问题是,那么节名有什么用?
I over-wrote all the section names ...
... the file can be linked ... correctly.
与 32 位 Windows 中使用的目标文件不同,如果不使用链接描述文件,ELF 目标文件中的部分名称将被忽略。
每个“PROGBITS”部分都包含指定该部分是否可写、可执行的标志and/or甚至不是图像的一部分(调试信息)。
(其实Windows使用的object文件也有这样的flags,但是一般设置为0,section name用来区分code和data sections。)
对于其他节类型(例如符号表),很清楚无论如何必须如何处理它们。
... the file can be ... executed correctly.
对于可执行文件和共享库,无论如何都会忽略这些部分。相反,使用文件的“程序头”。
“程序头”告诉OS文件中的某个地址范围必须加载到内存中。一个“程序头”可能涵盖多个部分。而“程序头”是没有名字的
示例:
Sections:
Name Address Offset in file Length
.text 0x10100 0x100 0x30 read-only
.rodata 0x10130 0x130 0x20 read-only
.data 0x20250 0x150 0x10 read-write
.sdata 0x20260 0x160 0x10 read-write
Program headers:
Address Offset in file Length
0x10100 0x100 0x50 read-only
0x20250 0x150 0x20 read-write