gpt4 book ai didi

找不到符号表(Elf格式)(C编程)

转载 作者:行者123 更新时间:2023-11-30 16:49:48 29 4
gpt4 key购买 nike

我实际上正在重新编码nmobjdump程序。我已经完成了objdump并且它运行良好,所以我现在正在研究nm。我试图找到符号表,为了做到这一点,我运行了节标题表,如下所示:

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如何工作

感谢您的帮助:)

最佳答案

I don't know if i'm doing it right

这个:

shdr = ((Elf64_Shdr *)(data + elf->e_shoff));

.e_shoff 添加到 void* 指针,该指针调用 undefined behavior .

但是,GCC treats arithmeticvoid* 上,就像它是一个 char* 一样,因此上面的代码仍然应该产生正确的结果iff您使用 GCC 编译了它。

您的第一步应该是通过运行 readelf -WS 来验证您尝试运行程序的文件实际上具有 SHT_SYMTAB 部分/路径/到/文件

假设确实如此,您的第二步应该是验证(在调试器中,或通过打印 shdrdata)shdr您计算出与由 readelf -h/path/to/file 打印的 Start ofsection headers 的匹配项。

附注请注意,完全剥离的 ELF 文件根本没有 SYMTAB 部分(执行时不需要它)。

关于找不到符号表(Elf格式)(C编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42457873/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com