我正在尝试在Linux的进程的可执行对象文件(Elf)中嵌入信息(一个简单的整数)。
我已经通过在文件中将整数值写为二进制文件,然后使用objcopy命令复制二进制文件内容来实现这一点。
objcopy --add-section .customsection=binaryfile processElfFile newProcessElfFile
通过这种方式,在newProcessElfFile中,我有一个完美的进程副本,其中包含一个包含整数值的新部分,我可以使用
查看该部分readelf -e newProcessElfFile
我还通过在Libelf库上使用一些C代码验证了部分值是否正确。一切正常。
现在,我想读取新部分中包含的整数值,并在加载elf文件时执行printk。
为了实现这一点,我需要修改加载器代码,即内核端。
现在的问题是:
为了解决这个问题,我想我需要在一个细分中链接我的自定义部分,以便我可以访问它。
所以我有两个相关的问题:
另一种可能性是将整数值添加为已存在的.rodata部分的元素,但遗憾的是我不知道如何执行它以及如何访问内核中的该部分。
答案 0 :(得分:4)
ELF标题(Elf32_Ehdr
或Elf64_Ehdr
)包含指向节标题表(成员e_shoff
,e_shentsize
)的信息。与段字符串表索引(e_shstrndx
)一起,此信息可用于读取节标题并最终找到您感兴趣的数据。