Tag: nm

无法在二进制文件中找到.dtors和.ctors

我正在读“黑客”这本书。 在书中有一节解释了.dtors和.ctors 。 我正在尝试重现本书的一个练习,但在我的可执行文件中,我没有这一部分。 起初我认为问题是我正在编译64位,但现在我正在编译32位和.dtors和.ctors仍未出现在节表中。 这是代码: #include #include static void miConstructor(void) __attribute__ ((constructor)); static void miDestructor(void) __attribute__ ((destructor)); int main(void) { printf(“En main() \n”); return 0; } void miConstructor(void) { printf(“En el constructor\n”); } void miDestructor(void) { printf(“En el destructor\n”); } 我正在编译: gcc -m32 -o a.out dtors_example.c 这是nm的输出: 080495f0 d _DYNAMIC 080496e4 d _GLOBAL_OFFSET_TABLE_ 080484dc […]

如何打印像nm这样的ELF文件的符号名称?

我知道符号的名称在shstrtab中。 但我不明白如何捕捉它们。 我应该将我的shstrab转换为Elf64_Sym,以便我可以使用st_name吗? Elf64_Shdr *shdr = (Elf64_Shdr *) (data + elf->e_shoff); Elf64_Shdr *symtab; Elf64_Shdr *shstrtab; Elf64_Shdr *strtab; char *str = (char *) (data + shdr[elf->e_shstrndx].sh_offset); for (int i = 0; i e_shnum; i++) { if (shdr[i].sh_size) { printf(“%s\n”, &str[shdr[i].sh_name]); if (strcmp(&str[shdr[i].sh_name], “.symtab”) == 0) symtab = (Elf64_Shdr *) &shdr[i]; if (strcmp(&str[shdr[i].sh_name], “.shstrtab”) == 0) shstrtab […]