我正在尝试从elf文件中打印符号表。我得到了.symtab和.strtab部分的偏移(我用readelf交叉检查)。但程序正在给出分段错误。以下是有问题的代码:
printf("\n\nSymbol table:");
for(i=0;i<symtab.sh_size/symtab.sh_entsize ;i++)
{
fseek(ElfFile,symtab.sh_offset+i*symtab.sh_entsize,SEEK_SET);
fread(&elfSym,1,sizeof elfSym,ElfFile);
printf("\nSymbol:%s,size:%u",elfSym.st_name+strtab.sh_offset,elfSym.st_size);
}
答案 0 :(得分:1)
这是错误:
printf("\nSymbol:%s,size:%u",elfSym.st_name+strtab.sh_offset,elfSym.st_size);
sym.st_name
为您提供了符号名称开头的.strtab
部分的偏移量,strtab.sh_offset
为您提供偏移量到文档到该部分开始的位置
但添加两个偏移量并不会为您提供可以使用%s
打印的内存位置,它会将偏移量提供给该字符串所在的文件。您仍需要将该偏移量的文件读入内存,然后您将能够将其打印出来。