如何从 elf 文件的 Header 部分中提取所有字段?
How do I extract all the fields from a Section Header for an elf file?
所以我能够使用此处的 Elf 教程获取 sh_name:http://wiki.osdev.org/ELF_Tutorial and this question: getting the sh_name member in a section header elf file,但是当使用相同的方法获取部分 header 中的其余字段时,我得到的输出与我在正在分析的 object 文件上调用 readelf -S
时得到的输出不同。我正在打印以下字符串:
sh_strtab_p + shdr[i].sh_offset
当我这样做时,我什么也得不到。是选角的问题吗?我应该将其转换为 int 还是类似的东西?我认为这将是一种字符串格式,因为我假设 sh_strtab
是 header.
部分的关联字符串 table
所以,结果证明我很傻,答案只是将Elf_Shdr.sh_offset
(这是一个uint32_t)转换为十六进制,你会得到相同的值就像你使用 readelf
一样。除了名称之外,不需要对任何内容使用字符串索引。所有其他字段都可以用同样的方式处理,如果你想要标志和类型的字符串表示,这里有一个 table 将值映射到 flag/type 的名称:https://docs.oracle.com/cd/E19683-01/817-3677/chapter6-94076/index.html.
所以我能够使用此处的 Elf 教程获取 sh_name:http://wiki.osdev.org/ELF_Tutorial and this question: getting the sh_name member in a section header elf file,但是当使用相同的方法获取部分 header 中的其余字段时,我得到的输出与我在正在分析的 object 文件上调用 readelf -S
时得到的输出不同。我正在打印以下字符串:
sh_strtab_p + shdr[i].sh_offset
当我这样做时,我什么也得不到。是选角的问题吗?我应该将其转换为 int 还是类似的东西?我认为这将是一种字符串格式,因为我假设 sh_strtab
是 header.
所以,结果证明我很傻,答案只是将Elf_Shdr.sh_offset
(这是一个uint32_t)转换为十六进制,你会得到相同的值就像你使用 readelf
一样。除了名称之外,不需要对任何内容使用字符串索引。所有其他字段都可以用同样的方式处理,如果你想要标志和类型的字符串表示,这里有一个 table 将值映射到 flag/type 的名称:https://docs.oracle.com/cd/E19683-01/817-3677/chapter6-94076/index.html.