如何读取加载程序中的自定义部分?

How can I read a custom section within the loader?

我试图在 Linux.

中的一个进程的可执行目标文件 (Elf) 中嵌入信息(一个简单的整数)

我通过将整数值作为二进制写入文件,然后使用 objcopy 命令复制二进制文件内容来实现这一点。

objcopy --add-section .customsection=binaryfile processElfFile newProcessElfFile

这样,在 newProcessElfFile 中,我有一个完美的进程副本,其中包含一个包含整数值的新部分,我可以使用

查看该部分
readelf -e newProcessElfFile

我还通过在 Libelf 库上使用一些 C 代码验证了部分值是否正确。一切正常。

现在,我想读取新节中包含的整数值,并在加载要执行的 elf 文件时执行 printk。

为了实现这一点,我需要修改内核端的加载程序代码。

现在的问题是:

为了解决这个问题,我想我需要 link 我的自定义部分在一个段中以便我可以访问它。

所以我有 2 个相关问题:

另一种可能是将整数值添加为已经存在的 .rodata 部分的元素,但不幸的是,我不知道如何执行它,也不知道如何访问内核中的该部分。

ELF header(Elf32_EhdrElf64_Ehdr)包含指向 header table 部分的信息(成员 e_shoffe_shentsize).连同段字符串 table 索引 (e_shstrndx),此信息可用于读取段 headers 并最终定位您感兴趣的数据。