找不到 Symbol Table(Elf 格式) (C 编程)
Can't find the Symbol Table(Elf format) (C programming)
我实际上正在重新编码 nm 和 objdump 程序。我已经完成 objdump 并且效果很好,所以我现在正在研究 nm。
我正在尝试找到 符号 table,以便通过 部分 header [=] 运行 table 像这样:
while (i < elf->e_shnum)
{
if (shdr[i].sh_type == SHT_SYMTAB)
printf("Symbol table found\n");
i++;
}
我从来没有 运行 通过这种情况,已经在我的 objdump 程序中尝试过同样的问题,找不到 SHT_SYMTAB。
我就是这样得到 部分 header table :
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.
然而,void*
上的 GCC treats arithmetic 就好像它是一个 char*
,所以上面的代码应该仍然产生正确的结果 iff 你用 GCC 编译它。
您的第一步应该是通过 运行宁readelf -WS /path/to/file
.
假设是这样,您的第二步应该是验证(在调试器中,或通过打印 shdr
和 data
)您计算的 shdr
是否匹配 Start of section headers
由 readelf -h /path/to/file
.
印刷
P.S。请注意,完全剥离的 ELF 文件根本没有 SYMTAB
部分(执行不需要)。
我实际上正在重新编码 nm 和 objdump 程序。我已经完成 objdump 并且效果很好,所以我现在正在研究 nm。 我正在尝试找到 符号 table,以便通过 部分 header [=] 运行 table 像这样:
while (i < elf->e_shnum)
{
if (shdr[i].sh_type == SHT_SYMTAB)
printf("Symbol table found\n");
i++;
}
我从来没有 运行 通过这种情况,已经在我的 objdump 程序中尝试过同样的问题,找不到 SHT_SYMTAB。
我就是这样得到 部分 header table :
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.
然而,void*
上的 GCC treats arithmetic 就好像它是一个 char*
,所以上面的代码应该仍然产生正确的结果 iff 你用 GCC 编译它。
您的第一步应该是通过 运行宁readelf -WS /path/to/file
.
假设是这样,您的第二步应该是验证(在调试器中,或通过打印 shdr
和 data
)您计算的 shdr
是否匹配 Start of section headers
由 readelf -h /path/to/file
.
P.S。请注意,完全剥离的 ELF 文件根本没有 SYMTAB
部分(执行不需要)。