这个字段指定了节的用途,例如PROGBITS表示这个节保存着程序定义的数据,如代码或初始化数据;GNU_HASH表示这个节保存着GNU版本的符号哈希表;DYNSYM表示这个节保存着动态符号表,里面包含着动态链接时使用的符号。 sh_flags:节的标志。这是一个位掩码,用于指定节的属性,比如是否可写、是否可执行、是否分配内存等。 sh_...
PT_LOAD:表示一个可加载的段,加载器将根据此段的信息将文件内容映射到进程的地址空间,通常包含以下两个可装载的段:存放程序代码的 text 段以及存放全局变量和动态链接信息的 data 段,上面的两个段将会被映射到内存中,并根据 p_align 中存放的值在内存 中对齐。 PT_DYNAMIC:表示动态链接信息段,包含动态链接所需...
.dynsym段包含了动态链接库有关的符号信息;.rel.*段包含的信息用于告诉系统将如何变换某些段的虚拟空间地址;.hash段包含一个哈希表,用来加速对符号的查找,所谓符号是编译器设置的用于记录代码中变量类型,取值等信息的数据结构,它属于编译原理的内容,有了符号,我们才能使用调试器对程序进行调试。.symtab对应符号表,它...
// Print ELF Section Headers char *getSectionTypeString(Elf_Word sectionType) { switch (sectionType) { case SHT_NULL: return "NULL"; case SHT_PROGBITS: return "PROGBITS"; case SHT_SYMTAB: return "SYMTAB"; case SHT_STRTAB: return "STRTAB"; case SHT_RELA: return "RELA"; case SHT_HASH:...
段节... 00 01 .interp 02 .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt 03 .init .plt .plt.got .plt.sec .text .fini 04 .rodata .eh_frame_hdr .eh_frame ...
SHT_HASH(5):存储符号哈希表,所有参与动态链接的目标只能包含一个哈希表,一个目标文件只能包含一个哈希表; 此种类型节的sh_link存储哈希表所使用的符号表的节索引,sh_info为0; SHT_DYAMIC(6):存储包含动态链接的信息,一个目标文件只能包含一个;
●.hash:这个节中保存的是符号表的哈希表,用来加快符号查找速度。 ●.init:这个节中保存了程序执行前的初始化代码,这些代码早于main函数被执行。 ●.fini:这个节中保存了程序退出时执行的代码,这些代码晚于main函数被执行。 ●.shstrtab:这个节中保存了一个字符串,里边全是节的名称。
.rela节//SHT_HASH,值为5,.hash节//SHT_DYNAMIC,值为6,.dynamic节//SHT_NOTE,值为7,此节包含一些注释信息//SHT_NOBITS,值为8,此节不在ELF文件中,而是在程序执行期间分配内存空间,比如.bss//SHT_REL,值为9,.rel节//SHT_SHLIB,值为10,保留节,具体含义未定义//SHT_DYNSYM,值为11,.dynsym节u64 sh...
第一步 空间与地址分配 扫描所有的输入目标文件,并且获得它们的各个段的长度、属性和位置,并且将输入目标文件中的符号表中所有的符号定义和符号引用收集起来,统一放到一个全局符号表中。 第二步 符号解析与重定位 使用第一步中收集到的信息,读取输入文件中段的数据、重定位信息,并且进行符号解析与重定位、调整代码中...
其他段 除了.text, .data, .bss 这 3 个最常用的段之外,ELF 文件也包含一些其他的段,下面列出了一些常见的段 段名说明 .rodata1只读数据段,存放只读数据,与 .rodata 一样 .comment存放编译器版本信息 .debug调试信息 .dynamic动态链接信息 .hash符号哈希表 ...