1//ELF Hash Function2unsignedintELFHash(char*str)3{4unsignedinthash =0;5unsignedintx =0;67while(*str)8{9hash = (hash <<4) + (*str++);//hash左移4位,把当前字符ASCII存入hash低四位。10if((x = hash &0xF0000000L) !=0)11{12//如果最高的四位不为0,则说明字符多余7个,现在正在存...
1 字符串符号表.shstrtab后跟着section_header_table;节区表头分布在elf文件最后,而字符串符号表往往是在最靠后的内容 2 section name需要在shstr table找;而segment 没有name只有type,只需比较就能确定类型 3 根据函数名找到函数指令:函数名hash值funHash,在hash表得到索引值funIndex,在dynsym表索引得到funInfo,fun...
SHT_STRTAB(3):一个字符串表,保存了每个节的节名称; SHT_RELA(4):存储可重定位表项,可能会有附加内容,目标文件可能有多个可重定位表项; 此种类型节的sh_link存储相关符号表的节索引,sh_info存储重定位所使用节的索引; SHT_HASH(5):存储符号哈希表,所有参与动态链接的目标只能包含一个哈希表,一个目标文件...
PT_PHDR:表示包含程序头表本身的位置和大小,可以使用readelf命令查看文件的Phdr表: 每个程序头表条目提供了在运行时如何处理相应段的信息。加载器通过读取程序头表,将段加载到内存中,从而正确执行可执行文件或共享库。 4.ELF的节头 ELF 二进制文件中的代码和数据在逻辑上被分为连续的非重叠块,称为节(section)。
4或8字节,节头表偏移FOA,如果没有节头表则该字段为0 Android对抗中经常会删除节表 e_flags 4字节标志,无用 e_ehsize 2字节,ELF文件头大小 Android不检查,默认ELF Header大小为52字节; IDA检查,修改该字段只会产生警告不影响反汇编 e_phentsize 2字节,表示程序头表每一个表项的大小 e_phnum 2字节,表示程...
SHT_HASH5,这样的section包含一个符号hash表,参与动态连接的目标代码文件必须有一个hash表。目前一个ELF文件中只包含一个hash表。讲链接的时候再细讲。 SHT_DYNAMIC6,包含动态链接的信息。目前一个ELF文件只有一个DYNAMIC section。 SHT_NOTE7,note section, 以某种方式标记文件的信息,以后细讲。
02.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.plt.got.text.fini.rodata.eh_frame_hdr.eh_frame 03.init_array.fini_array.data.rel.ro.dynamic.got.data.bss 04.dynamic ...
类型为SHT_HASH的.hash 节区包含符号哈希表。� 类型为SHT_PROGBITS的.got 和.plt 节区包含两个不同的表:全局偏移表和过 程链接表。 因为任何符合ABI规范的程序都要从共享目标库中导入基本的系统服务,动态链 接器会参与每个符合ABI规范的程序的执行。... ...
第一步 空间与地址分配 扫描所有的输入目标文件,并且获得它们的各个段的长度、属性和位置,并且将输入目标文件中的符号表中所有的符号定义和符号引用收集起来,统一放到一个全局符号表中。 第二步 符号解析与重定位 使用第一步中收集到的信息,读取输入文件中段的数据、重定位信息,并且进行符号解析与重定位、调整代码中...
1 字符串符号表.shstrtab后跟着section_header_table;节区表头分布在elf文件最后,而字符串符号表往往是在最靠后的内容 2 section name需要在shstr table找;而segment 没有name只有type,只需比较就能确定类型 3 根据函数名找到函数指令:函数名hash值funHash,在hash表得到索引值funIndex,在dynsym表索引得到funInfo,fun...