我的过程如下。我想附加到已经编译的ELF文件中的部分。让我们将此文件命名为bytecode.bin
然后我做: br />
objcopy --add-section .mysection=bytecode.bin \
--set-section-flags .mysection=code,contents,alloc,load,readonly \
myprogram myprogram_edited
其中XXXXXX是该节的新VMA地址。
我得到警告:
objcopy --adjust-section-vma .mysection=$((16#XXXXX)) myprogram_edited myprogram_edited
执行操作时:
objcopy: stIbZt3t: warning: allocated section `.mysection' not in segment
我看到:
objdump -d myprogram_edited
所以我看到的创建OK并调整VMA。但是该部分未映射到段,因此无法在运行时加载。
如何解决此问题?
EDIT:
我选择使用英特尔的PIN工具。对于RI和二进制注入非常有用且功能强大。
#1 楼
libbfd
并不是魔杖,实际上它非常有限(这是GDB无法在没有节表的情况下调试文件的原因之一)。特别是,objcopy
不会为您添加PHT条目,因此您将必须手动扩展或调整PHT。您可以使用十六进制编辑器手动进行操作,也可以尝试使用诸如libelf
之类的库(它为您提供了必要的原语,但您需要自己实现逻辑)。#2 楼
也许您可以看看LIEF:GitHub页面:https://github.com/lief-project/LIEF
站点:https://lief.quarkslab.com
评论
如果您可以提供有关如何编写LIEF中所要求内容的基本示例,那么您的答案将更有价值。
–恐怖
17年4月5日在10:31
#3 楼
我最终使用了英特尔PIN码非常有用。
评论
好吧,PIN不会“在已编译的二进制文件中添加一个部分”,因此这并非如前所述。
–伊戈尔·斯科钦斯基♦
19年8月12日在18:54
评论
“这是GDB无法在没有节表的情况下调试文件的原因之一” –这就是我一直想知道的事情。感谢您提及此
– julian♦
17年1月1日在9:57
问题是,我需要一些通用工具来处理更多可执行文件格式,而不仅仅是ELF。但是我认为仅ELF已经是一个不错的问题。
– 0xfede7c8
17年1月1日在18:44
好吧,我不知道有任何这样的工具,因此我想您必须自己编写。
–伊戈尔·斯科钦斯基♦
17年1月1日19:31