Segmentation fault 从elf文件打印符号表

Segmentation fault 从elf文件打印符号表,segmentation-fault,elf,Segmentation Fault,Elf,我正在尝试从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(&elf

我正在尝试从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);
}
printf(“\n\n符号表:”);
对于(i=0;i这是错误:

printf("\nSymbol:%s,size:%u",elfSym.st_name+strtab.sh_offset,elfSym.st_size);
sym.st_name
提供到符号名称开始处的
.strtab
部分的偏移量,
strtab.sh_offset
提供到该部分开始处的文件的偏移量

但是,添加两个偏移量并不能为您提供一个可以使用
%s
打印的内存位置,它会为您提供到该字符串所在文件中的偏移量。您仍然需要从该偏移量处的文件读取到内存中,然后才能打印它