2012-06-02 31 views
1

我們收到了一份家庭作業作業,其中我們需要採用ELF文件並打印其部分的名稱。使用字符串表格和打印部分名稱

我們應該只使用我們直接從ELF頭部收到的數據,即 ,這意味着我們不能使用任何「高級別」過程 - 我們需要直接轉到我們需要的數據。

因此,即時通訊設法打印第一部分的名稱。我知道名字應該在字符串表中。這是我到目前爲止有:

我得到的ELF文件的使用mmap...

elfhead =(Elf32_Ehdr *) mmap... 

,我發現了使用一節中的成員ELF頭偏移開始

sectionoffset = elfhead->e_shoff 

然後

section = (Elf32_Shdr*)(elfhead + sectionoffset) 
nameoffset = section->sh_name  
stringoffset = elfhead->e_shstrndx; 

需要明確的是 -

    elfhead
  • 我有ELF頭
  • 在區間i具有節頭
  • stringoffset我有其中 字符串表應該是
  • nameoffset節表內的索引i在 中有索引的第一個段名是假設的字符串表。

給定上面的代碼,我該如何轉到名字並打印它?

+0

可能重複(http://stackoverflow.com /問題/ 10863510 /獲取最SH-名稱構件-IN-A截面頭小精靈文件) –

回答

1

那麼首先你得有訪問部分的字符串表,並且由於頭在ELF文件的第一件事:

char* stringTable = elfhead + (section + header->stringoffset)->sh_offset; 

一旦你的,你真的要do是使用已經獲得的nameoffset打印第一個,就像這樣。

char* name = stringTable + nameoffset; 
printf("%s\n",name); 

FYI,打印名的其餘部分將是一個簡單的循環:獲取sh_name構件在節頭elf文件]的

for(i=0;i<header->e_shnum;i++){ 
     char* name = stringTable + nameoffset; 
     printf("%s\n",name); 
     section++; 
    }