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我有精灵标题
  • 在部分我有部分标题
  • stringoffset我应该在字符串表的部分表内有索引
  • nameoffset我的字符串表中有第一个部分名称应该是的索引。

鉴于上面的代码,我如何去名字并打印它?

4

1 回答 1

1

首先,您必须有权访问该部分的字符串表,并且由于标题是 ELF 文件中的第一件事:

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

一旦你有了它,你真正需要做的就是使用nameoffset你已经获得的打印第一个,就像这样。

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

仅供参考,打印其余名称将是一个简单的循环:

for(i=0;i<header->e_shnum;i++){
        char* name = stringTable + nameoffset;
        printf("%s\n",name);
        section++;
    }
于 2012-06-02T18:38:01.140 回答