C 使用字符串表和打印节名称
我们收到了一份家庭作业,作业中我们需要获取一个ELF文件并打印其部分的名称 我们应该只使用直接从ELF报头接收的数据来完成所有这些工作, 这意味着我们不能使用任何“高级”程序——我们需要直接访问我们需要的数据 所以,我试着打印第一部分的名称。我知道名字应该在字符串表中。这就是我到目前为止所做的: 我正在使用C 使用字符串表和打印节名称,c,linux,elf,C,Linux,Elf,我们收到了一份家庭作业,作业中我们需要获取一个ELF文件并打印其部分的名称 我们应该只使用直接从ELF报头接收的数据来完成所有这些工作, 这意味着我们不能使用任何“高级”程序——我们需要直接访问我们需要的数据 所以,我试着打印第一部分的名称。我知道名字应该在字符串表中。这就是我到目前为止所做的: 我正在使用mmap… elfhead =(Elf32_Ehdr *) mmap... 我使用ELF头中的成员获取截面偏移量 sectionoffset = elfhead->e_shoff 然
mmap…
elfhead =(Elf32_Ehdr *) mmap...
我使用ELF头中的成员获取截面偏移量
sectionoffset = elfhead->e_shoff
然后
清楚地说——
- 在
中,我有elf头elfhead
- 在节中,我有节标题
- 在
中,我在节表中有索引,其中 字符串表应该是stringoffset
- 在
中,我在 假定第一节名称所在的字符串表namecoffset
根据上面的代码,如何找到名字并打印出来?首先,您必须访问节的字符串表,并且由于头是ELF文件中的第一件事:
char* stringTable = elfhead + (section + header->stringoffset)->sh_offset;
一旦你有了它,你真正需要做的就是使用你已经获得的namecoffset
打印第一个,就像这样
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++;
}
(i=0;ie_shnum;i++)的{
char*name=stringTable+nameoffset;
printf(“%s\n”,名称);
第++;
}
首先,您必须访问节的字符串表,并且由于头是ELF文件中的第一件事:
char* stringTable = elfhead + (section + header->stringoffset)->sh_offset;
一旦你有了它,你真正需要做的就是使用你已经获得的namecoffset
打印第一个,就像这样
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++;
}
(i=0;ie_shnum;i++)的{
char*name=stringTable+nameoffset;
printf(“%s\n”,名称);
第++;
}