Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用字符串表和打印节名称_C_Linux_Elf - Fatal编程技术网

C 使用字符串表和打印节名称

C 使用字符串表和打印节名称,c,linux,elf,C,Linux,Elf,我们收到了一份家庭作业,作业中我们需要获取一个ELF文件并打印其部分的名称 我们应该只使用直接从ELF报头接收的数据来完成所有这些工作, 这意味着我们不能使用任何“高级”程序——我们需要直接访问我们需要的数据 所以,我试着打印第一部分的名称。我知道名字应该在字符串表中。这就是我到目前为止所做的: 我正在使用mmap… elfhead =(Elf32_Ehdr *) mmap... 我使用ELF头中的成员获取截面偏移量 sectionoffset = elfhead->e_shoff 然

我们收到了一份家庭作业,作业中我们需要获取一个ELF文件并打印其部分的名称

我们应该只使用直接从ELF报头接收的数据来完成所有这些工作, 这意味着我们不能使用任何“高级”程序——我们需要直接访问我们需要的数据

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

我正在使用
mmap…

elfhead =(Elf32_Ehdr *) mmap...
我使用ELF头中的成员获取截面偏移量

sectionoffset = elfhead->e_shoff
然后

清楚地说——

  • elfhead
    中,我有elf头
  • 在节中,我有节标题
  • 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”,名称);
第++;
}