从elf文件打印符号表

时间:2015-04-28 20:41:09

标签: 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(&elfSym,1,sizeof elfSym,ElfFile);

    printf("\nSymbol:%s,size:%u",elfSym.st_name+strtab.sh_offset,elfSym.st_size);
}

1 个答案:

答案 0 :(得分:1)

这是错误:

printf("\nSymbol:%s,size:%u",elfSym.st_name+strtab.sh_offset,elfSym.st_size);

sym.st_name为您提供了符号名称开头的.strtab部分的偏移量,strtab.sh_offset为您提供偏移量到文档到该部分开始的位置

但添加两个偏移量并不会为您提供可以使用%s打印的内存位置,它会将偏移量提供给该字符串所在的文件。您仍需要将该偏移量的文件读入内存,然后您将能够将其打印出来。