【问题标题】:Using the string table and printing sections names使用字符串表并打印部分名称
【发布时间】:2012-06-02 11:13:48
【问题描述】:

我们收到了一个家庭作业,我们需要在其中获取一个 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;

说清楚 -

  • elfhead我有精灵头
  • 在部分我有部分标题
  • stringoffset 我有节表内的索引 字符串表应该是
  • nameoffset我有索引 第一个部分名称所在的字符串表。

根据上面的代码,我如何找到名字并打印出来?

【问题讨论】:

标签: c linux elf


【解决方案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++;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    相关资源
    最近更新 更多