kit*_*Fox 5 c mmap elf symbol-table
我有一个使用mmap系统调用的程序:
map_start = mmap(0, fd_stat.st_size, PROT_READ | PROT_WRITE , MAP_SHARED, fd, 0)
Run Code Online (Sandbox Code Playgroud)
和一个标题变量:
header = (Elf32_Ehdr *) map_start;
Run Code Online (Sandbox Code Playgroud)
如何访问符号表并使用标头变量打印其整个内容?
您可以通过查看e_shoffelf标题的字段来获取节表:
sections = (Elf32_Shdr *)((char *)map_start + header->e_shoff);
Run Code Online (Sandbox Code Playgroud)
您现在可以在节表中搜索具有类型的部分SHT_SYMBTAB,即符号表.
for (i = 0; i < header->e_shnum; i++)
if (sections[i].sh_type == SHT_SYMTAB) {
symtab = (Elf32_Sym *)((char *)map_start + sections[i].sh_offset);
break; }
Run Code Online (Sandbox Code Playgroud)
当然,如果您的文件不是ELF文件或以某种方式损坏,您还应该进行大量的健全性检查.
在Linux的精灵(5)手册有很多关于格式的信息的.