在 Java 中提取 ELF 的 .text 部分

Extracting the .text section of an ELF in Java

我目前一直在使用 linux 命令

objcopy -j .text -O binary sample sample.text

仅获取可执行文件的 .text 部分。

我想知道是否有一些 Java library/code 可以提供相同的功能。

谢谢

我不知道为什么你的 previous question (note: link only accessible to some users) was put on hold, it seemed perfectly valid to me. Maybe drop the java 标签因为大多数 Java 程序员只是不知道关于 ELF 的合理问题是什么样的?

无论如何,我们再来一次:

您需要阅读 ELF specification and the psABI supplement for the relevant target (some of which are collected here。在 ELF 系统上查看 /usr/include/elf.h header 文件中的定义也很有帮助。

一般来说,找到命名部分的开头是相当简单的。您需要在精灵 header 的帮助下找到 header table 部分(字段 e_shoffe_shentsizee_shnum)并解析它们(条目布局为 Elf32_SdhrElf64_Shdr)。要查找该部分的名称,您需要查看编号为 e_shstrndx 的部分 header table 条目,它给出了带有字符串 [=47] 的 table 条目=]. header 部分中的 sh_name 字段只是该部分的偏移量,您需要将该位置的 null-terminated 字符串与 .text.

进行比较

Eclipse CDT 有一个 ELF 解析器:

也许这是一个选项,除非您有兴趣实现实际的 ELF 解析。

如果这对以后的任何人都有用:

尽管我已经实现了使用 Eclipse 文件解析器提取 .text 部分的方法,但 GNU binutils Java 库提供了最简单的方法,尽管我之前忽略了该库.