linux - 在 ELF 文件中搜索 .init 部分

标签 linux elf string-table

如何找到 .init 部分? 节标题有字段 Elf32_Word sh_name。所以我想我必须遍历所有部分才能找到名称为 .init 的部分,但是 sh_name 不是字符数组。它是字符串表中条目的索引。 字符串表在哪里? ELF 头中有字段elfHdr.e_shstrndx。它是字符串表所在部分的索引。 因此,为了计算字符串表的偏移量,我使用了下面描述的公式。

offset = ((elfHdr.e_shstrndx)*elfHdr.e_shentsize)+elfHdr.e_shoff,  
where 
elfHdr.e_shstrndx = index where we can find .shstrtab
elfHdr.e_shentsize = Size of each Section Header
elfHdr.e_shoff = Offset at which section header starts.

但是查出来的offset并不是String Table的正确offset。我已经在各种文件上试过了。 可能有另一种方法可以确定部分是否为 .init

最佳答案

看来你几乎做对了。

您计算的偏移量 是字符串表部分的部分标题的文件偏移量(以字节为单位)。同样,这是本节标题的开头,它将是 Elf32_Shdr 类型的结构。现在您应该阅读它的 sh_offsetthis 将是您要查找的字符串列表的偏移量。

关于linux - 在 ELF 文件中搜索 .init 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17029206/

相关文章:

linux - bash脚本: options - case: range of multiple numbers

x86-64 - 是否可以用编译后的二进制文件中的虚拟对象替换特定函数的每个实例?

linker - 有关加载和链接 elf 文件的引用书或文档

linux - 区分ELF文件中的.shstrtab和.strtab

mysql - 使用 eRuby 连接 MySQL 时出现问题

c - Linux 系统调用何时触发段错误与返回 EFAULT?

linux - 找到 exec rm : No such file or directory

linux - 如何在不改变其功能的情况下将一些垃圾指令插入/删除到 ELF/PE 文件中?

c - 使用字符串表 "decoder ring"的 printf() 调试库

c++ - LoadString() 方法在 C++ 中不起作用