如何转储 ELF 文件的 .dynsym 部分?
how to dump the .dynsym section of an ELF file?
.dynsym 部分是一堆按顺序排列的 ElfN_Sym 结构,所以我'我试图转储所有符号的 st_name 但显然我解析文件的方式有问题。
我做的第一件事是通过迭代 headers 部分并比较 [=36= 来获取 .dynsym 部分的索引]字段通过字符串table。然后我通过 sh_addr 字段得到了 .dynsym 的地址:
Elf64_Sym *symbol = (Elf64_Sym *) shdr[i].sh_addr;
printf("%s\n", symbol->st_name);
然而,由于某种原因,这是 SEGFAULTing,我做错了什么,正确的方法是什么?另外,使用 shdr[i].sh_addr 和 &shdr[i]?
有区别吗
This however is SEGFAULTing for some reason,
它 SIGSEGV
s 因为 symbol->st_name
不是指向字符串的指针,它是实际字符串所在的 .dynstr
部分的偏移量。
为了打印名称,您必须read
将.dynstr
的内容放入缓冲区(或mmap
.dynstr
部分),并使用st_name
作为该缓冲区的偏移量。
我做的第一件事是通过迭代 headers 部分并比较 [=36= 来获取 .dynsym 部分的索引]字段通过字符串table。然后我通过 sh_addr 字段得到了 .dynsym 的地址:
Elf64_Sym *symbol = (Elf64_Sym *) shdr[i].sh_addr;
printf("%s\n", symbol->st_name);
然而,由于某种原因,这是 SEGFAULTing,我做错了什么,正确的方法是什么?另外,使用 shdr[i].sh_addr 和 &shdr[i]?
有区别吗This however is SEGFAULTing for some reason,
它 SIGSEGV
s 因为 symbol->st_name
不是指向字符串的指针,它是实际字符串所在的 .dynstr
部分的偏移量。
为了打印名称,您必须read
将.dynstr
的内容放入缓冲区(或mmap
.dynstr
部分),并使用st_name
作为该缓冲区的偏移量。