【发布时间】:2017-02-25 15:25:06
【问题描述】:
我实际上是在重新编写 nm 和 objdump 程序。我已经完成了 objdump 并且效果很好,所以我现在正在研究 nm。 我试图找到 符号表,为了做到这一点,我像这样遍历 Section header table:
while (i < elf->e_shnum)
{
if (shdr[i].sh_type == SHT_SYMTAB)
printf("Symbol table found\n");
i++;
}
我从来没有遇到过这种情况,已经在我的 objdump 程序中尝试过,同样的问题,找不到 SHT_SYMTAB。
这就是我获得节标题表的方式:
Elf64_Shdr *shdr;
unsigned char *shstrtab;
void *data;
Elf64_Ehdr *elf;
//I reduced the code to make it more readable
data = mmap(NULL, filesize(fd), PROT_READ, MAP_SHARED, fd, 0);
elf = ((Elf64_Ehdr *)data);
shdr = ((Elf64_Shdr *)(data + elf->e_shoff));
shstrtab = ((unsigned char *)(data + shdr[elf->e_shstrndx].sh_offset));
我不知道我是否做得对(即使我的 objdump 工作正常),或者我不明白 nm 是如何工作的
感谢您的帮助:)
【问题讨论】:
-
我实际上用 void * 中的 Ehdr 替换了数据指针,仍然无法正常工作