我们收到了一份家庭作业,我们需要拿一份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
中我的索引位于section表中
字符串表应该是nameoffset
中我有索引
第一个部分名称的字符串表。如果给出上面的代码,我如何转到第一个名称并打印出来?
答案 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++;
}