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