SHT_NULL //无效节 SHT_STRTAB //本节是字符串表 ELF文件可以有多个字符串表节 SHT_RELA //重定位节 SHT_HASH //表明本节包含一张哈希表 目前一个ELF文件最多只能有一张哈希表 SHT_DYNAMIC //表明本节包含动态链接信息 目前一个目标文件最多一个dynamic节 SHT_NOBITS //表明本节内容为空,不占用实际内存...
1 字符串符号表.shstrtab后跟着section_header_table;节区表头分布在elf文件最后,而字符串符号表往往是在最靠后的内容 2 section name需要在shstr table找;而segment 没有name只有type,只需比较就能确定类型 3 根据函数名找到函数指令:函数名hash值funHash,在hash表得到索引值funIndex,在dynsym表索引得到funInfo,fun...
g;while(*name){h=(h<<4)+*name++;g=h&0xf0000000;h^=g;h^=g>>24;}returnh;}staticElf32_Sym*soinfo_elf_lookup(soinfo*si,unsigned hash,constchar*name){Elf32_Sym*s;Elf32_Sym*symtab=si->symtab;constchar*strtab=si->strtab;
ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。实际上,一个文件中不一定包含全部内容,而且它们的位置也未必如同所示这样安排,只有ELF头的位置是固定的,其余各部分的位置、大小等信息由ELF头中的各项值来决定。 ELF目标文件类型 (1)...
类型为SHT_HASH的.hash 节区包含符号哈希表。� 类型为SHT_PROGBITS的.got 和.plt 节区包含两个不同的表:全局偏移表和过 程链接表。 因为任何符合ABI规范的程序都要从共享目标库中导入基本的系统服务,动态链 接器会参与每个符合ABI规范的程序的执行。... ...
SHT_HASH(5): 符号对应的 hash 表,用于快速查找. SHT_DYNAMIC(6): 动态链接相关信息 SHT_NOTE(7): 用于标记文件的信息 SHT_NOBITS(8): 该 section 在 elf 文件中不占用空间 SHT_REL(9): 重定位信息 SHT_DYNSYM(11): 动态链接符号表 SHT_INIT_ARRAY(14): 函数指针数组,数组中的每个函数指针执行初始...
.hash是一个散列表,允许在不对全表元素进行线性搜索的情况下,快速访问所有符号表项。 4.符号表机制(readelf -s) 符号表保存了程序实现或使用的所有全局变量和函数,如果程序引用一个自身代码未定义的符号,则称之为未定义符号,这类引用必须在静态链接期间用其他目标模块或库解决,或在加载时通过动态链接解决。
节头表和段头表其实分别是链接和加载的视图,结构大致如下: image.png ELF 64的数据类型定义如下: image.png ELF文件头格式 文件头格式如下: image.png 可以找一个so,用 readelf -h 看看输出,结果可以完全对上: image.png 对于MacBook M1 的设备可能没有readelf,objdump等命令,一个简单的方法是可以直接使用ndk...
hash table和chain(用来使动态连接器解析符号更加容易)。hash table和chain 通常被用来迅速判定在符号表中哪个entry可能符合所请求的符号名。hash table(总 是伴随着chain的)被作为整型数组存放。在hash表中,一半位置是留给那些buckets的, 另一半是留给在chain中的元素(element)的. hash table直接反映了symbol table ...