2015-04-28 34 views
0

我想從elf文件打印符號表。我得到了部分.symtab和.strtab的偏移量(我用readelf進行了交叉檢查)。但該程序給出了分段錯誤。這是有問題的代碼:從elf文件打印符號表

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

這是錯誤:

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

sym.st_name讓你進入.strtab部分,其中的符號名開始偏移,並且strtab.sh_offset爲您提供了偏移到文件到該部分開始的位置。

但是添加兩個偏移不會給你一個你可以用%s打印的內存位置,它會給你偏移到該字符串所在的文件。您仍然需要將文件以該偏移量讀入內存,然後然後您將能夠打印它。