高效地向ELF文件中添加新节段

3
我想要向一个 ELF 文件(称为 E)中添加一个新的部分,用来存储 .text 部分的完整性哈希值。假设我将.text 分成 T1,T2..Tn 块,并得到哈希值 H1,H2..Hn,然后将所有哈希值添加到 E 的新的 .my_hash 部分中。
其中一种天真的方法是:
  • 扫描文件 E 并计算/存储哈希值到一个单独的二进制文件 B
  • B 转换为 B.o 文件
  • 使用 objcopy --rename_section.data 部分重命名为 .my_hash 部分
  • 最后合并 E.o(假设在生成 E 之前也有该文件)和 B.o
有更好的方法吗?

好奇...您通过对个别部分进行身份验证试图实现什么目标? - Dietrich Epp
我正在对内核源代码(解释器)进行一些更改,我将检查那些标签。 - Paarth
看起来你想要签署整个文件,而不仅仅是部分,因为例如修改“.data”部分的关键部分甚至更改入口点以转到自己的存根将是微不足道的。 - Dietrich Epp
1个回答

4
使用objcopy --add-section命令。你可能还需要使用--set-section-flags选项。

你能解释一下如何做到吗? - SamB
文档上有详细说明:https://sourceware.org/binutils/docs-2.25/binutils/objcopy.html#objcopy。基本上,您可以使用 objcopy --add-section .my_hash=file 命令,文件的内容将被直接用作节的内容。 - Tom Tromey
我的方法和你的方法有所不同。我的方法替换了可加载段'.data'。但是当我们添加新的节时,它不能被设置为可加载。将标志设置为“load”会出现警告:“分配的节.my_hash'不在段中。”这意味着我无法通过内核访问.my_hash'以检查完整性。 - Paarth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接