我在 Linux 中,我已经多次看到这个问题,但从来没有,没有人回答如何真正使这项工作发挥作用。
我需要向已经编译的二进制文件添加一个部分。让我们说一下是一个ELF文件。我正在使用objcopy,所以这对于任何格式都应该是通用的,因为objcopy使用处理多种格式的libbfd。
我的流程如下。
我为要附加到已编译 ELF 文件的部分创建字节码。让我们将此文件命名为 bytecode.bin
然后我做:
objcopy --add-section .mysection=bytecode.bin \
--set-section-flags .mysection=code,contents,alloc,load,readonly \
myprogram myprogram_edited
然后我调整了该部分的VMA:
objcopy --adjust-section-vma .mysection=$((16#XXXXX)) myprogram_edited myprogram_edited
其中 XXXXXX 是该部分的新 VMA 地址。
我收到警告:
objcopy: stIbZt3t: warning: allocated section `.mysection' not in segment
当我做:
objdump -d myprogram_edited
我明白:
Disassembly of section .mysection:
0000000000201011 <.mysection>:
...
...
所以我看到该部分创建正常并且 VMA 已调整。但是该部分未映射到段,因此无法在运行时加载。
我该如何解决这个问题?
编辑:
我选择使用英特尔的PIN工具。对于 RI 和二进制注入非常有用和强大。