将节添加到没有节的 ELF 文件中

问题描述 投票:0回答:1

根据规范,ELF 文件格式只能包含文件头,而不包含节头。我有一些(VMProtect 之后的 ELF)。我可以以某种方式添加节标题吗 - 我需要将我的 .note 信息写入此文件,但我不能这样做,因为节已被 VMProtect 剥离。 objcopy --add-section 失败。

elf
1个回答
0
投票

您可以尝试通过使用十六进制编辑器修改文件来手动添加节标题(例如 imhex;对 elf 使用模式文件:文件 -> 导入 -> 模式文件 -> elf)。问题可能是该文件不包含节标题,并且

objcopy
在创建第一个节标题时出现问题。我还没有对此进行测试,但如果您以包含某些节标题的方式修改文件,objcopy 可能不会抱怨使用
--add-section

您感兴趣的

ELF file 标头字段:

  • e_shoff(文件中节头开始的偏移量),
  • e_shentsize(单个节头的大小;取决于体系结构:64 表示 64 x86_64,40 表示 i386),
  • e_shnum(节标题的数量),
  • e_shstrndx(SHT_STRTAB 节头的索引)。

以下内容应该或多或少有效:

  1. 令文件大小为$n$。调整文件大小以容纳 strtab 部分和节标题
  2. 在偏移量 $n$ 处为字符串制表符保留一些空间,例如 $m$
  3. 将 e_shoff 设置为 $n+m$,将 e_shentsize 设置为适合您的架构的值,将 e_shnum 设置为 1,将 e_shstrndx 设置为 0
  4. 将您创建的节标题的 sh_offset 设置为 $n$,sh_size 设置为 $m$,sh_type 设置为 SHT_STRTAB,sh_flags 设置为 32。

然后,使用

objcopy --add-section
添加您的部分。

有关更多信息,请参阅从第 4 页开始的链接器和库指南。 187. elf格式的定义在

/usr/include/elf.h
(你可能需要安装一些额外的包)

© www.soinside.com 2019 - 2024. All rights reserved.