memset(Hash, -1, sizeof Hash); for(int i = 1; i <= n; i++) { scanf("%s", str); int j = 0; while(str[j] == '0') j++; hash_table(str + j); } printf("%d\n", res); } return 0; }
SHT_HASH: HASH 表 5 SHT_DYNAMIC: 动态链接 6 SHT_NOTE : 注释 7 SHT_NOBITS: 不存在于文件中 8 SHT_REL : 重定位的一些信息 9 SHT_SHLIB 10 SHT_DYNSYM : 动态链接的符号表 11 SHT_INIT_ARRAY 14 SHT_FINI_ARRAY 15 SHT_PREINIT_ARRAY 16 SHT_GROUP 17 SHT_SYMTAB_SHNDX 18 SHT_LOOS 0x60000...
SHT_STRTAB 3 该类型节区包含字符串表( STRing TABle)。 SHT_RELA 4 该类型节区包含显式指定位数的重定位项( RELocation entry with Addends),例如,32 位目标文件中的 Elf32_Rela 类型。此外,目标文件可能拥有多个重定位节区。 SHT_HASH 5 该类型节区包含符号哈希表( HASH table)。 SHT_DYNAMIC 6 该类型...
除了符号表(symbol table),GOT(global offset table),PLT(procedure linkage table),字符串表(string table),ELF objects还可以包含一个 hash table和chain(用来使动态连接器解析符号更加容易)。hash table和chain 通常被用来迅速判定在符号表中哪个entry可能符合所请求的符号名。hash table(总 是伴随着chain的)被作...
.hash节有时也称为.gnu.hahs,保存了一个用于查找符号的散列表。 .symtab节保存了ElfN_Sym类型的符号信息,因此节类型被标记为SHT_SYMTAB。 .strtab节保存的是符号字符串表,表中的内容会被.symtab的ElfN_Sym结构中的st_name条目引用。由于其保存了字符串表,因此节类型被标记为SHT_STRTAB。
使用哈希表可以加快动态符号表的查找速度。哈希表就是DT_HASH的节,看下实际例子的输出,命令是readelf --gnu-hash-table: image.png 内容比较多,忽略了一部分,接下来看下结构: image.png 对应的哈希函数如下: image.png 一个哈希表需要解决如何快速查找,如何解决冲突的问题。 看看hash 表如何快速查找,这儿用到了...
linkage table),字符串表(string table),ELF objects还可以包含一个 hash table和chain(用来使动态连接器解析符号更加容易)。hash table和chain 通常被用来迅速判定在符号表中哪个entry可能符合所请求的符号名。hash table(总 是伴随着chain的)被作为整型数组存放。在hash表中,一半位置是留给那些buckets的, ...
ELF Hash Table根据符号名查找符号地址的流程如下 1.根据elfhash函数计算符号名的hash 2.index=buckets[hash%nbucket] 3.如果index==SHT_UNDEF(0)则未找到符号,结束 4.如果符号名不同则根据index从chains表找下一个符号索引,继续第3步 代码表示如下: uint32_t findSymbolIndexByElfHash(const char* symbolName...
ELF 文件可分为两部分来看待,即链接节(linkable section)和执行段(exectable segment)。 从链接器的角度看,看到的是一堆 section,也称之为节。 从CPU 调度执行的角度看,看到的是一堆 segment,也称之为段。还记得前面学习的段寄存器吗?那是将内存分段,这里是将一个可执行程序按功能分如代码段、数据段等。
unsigned int sym_offset=0;if(!soname||!symbol||!newval)return0;si=(soinfo*)dlopen(soname,0);if(!si)return0;s=soinfo_elf_lookup(si,elfhash(symbol),symbol);if(!s)return0;sym_offset=s-si->symtab;rel=si->plt_rel;/* walk through reloc table, find symbol index matching one we've ...