使用字符串表和打印部分名称

时间:2012-06-02 11:13:49

标签: c linux elf

我们收到了一份家庭作业,我们需要拿一份ELF文件并打印其章节的名称。

我们应该只使用我们直接从ELF头接收的数据来做所有这些, 意思是我们不能使用任何“高级”程序 - 我们需要直接转到我们需要的数据。

所以,我试图打印第一部分的名字。我知道这些名字应该在字符串表中。这就是我到目前为止所做的:

我正在使用mmap...

开始使用ELF文件
elfhead =(Elf32_Ehdr *) mmap...

我使用ELF标题中的成员

获取部分偏移量
sectionoffset = elfhead->e_shoff

然后

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

要清楚 -

  • in elfhead我有精灵标题
  • 在第i部分中有章节标题
  • stringoffset中我的索引位于section表中 字符串表应该是
  • nameoffset中我有索引 第一个部分名称的字符串表。

如果给出上面的代码,我如何转到第一个名称并打印出来?

1 个答案:

答案 0 :(得分: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++;
    }