【问题标题】:Efficiently adding a new section in an ELF file有效地在 ELF 文件中添加新部分
【发布时间】:2015-03-15 06:47:30
【问题描述】:

我想在一个存储 .text 部分的完整性哈希的 ELF 文件(比如 E)中添加一个新部分。假设我将 .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

有更好的方法吗?

【问题讨论】:

  • 很好奇...你想通过验证单个部分来完成什么?
  • 我正在尝试对内核源代码(解释器)进行一些更改,我将在其中检查这些标签。
  • 您似乎想要签署整个文件,而不仅仅是部分,因为这对例如来说是微不足道的。修改.data 部分的关键部分,甚至更改入口点以转到您自己的存根。

标签: linux gcc linker elf


【解决方案1】:

使用objcopy --add-section。你可能也想要--set-section-flags

【讨论】:

  • 你能解释一下怎么做吗?
  • 文档在这方面没问题:sourceware.org/binutils/docs-2.25/binutils/objcopy.html#objcopy。但基本上你可以使用objcopy --add-section .my_hash=file,文件的内容将被逐字用作section内容。
  • 我的方法和你的方法不同。我的替换了可加载段的“.data”。但是当我们添加一个新部分时,它不能被设置为可加载的。将标志设置为“加载”会发出警告:分配的部分“.my_hash”不在段中。这意味着我无法通过内核访问“.my_hash”来检查完整性。
猜你喜欢
  • 2010-11-08
  • 2011-10-14
  • 1970-01-01
  • 2017-07-03
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
  • 2010-11-10
相关资源
最近更新 更多