我知道您可以使用相同大小的值轻松修补ELF。 但是,如果我想改变它以获得更大的价值呢?有没有办法打开包装并重新包装ELF?
我对在内存中修补二进制文件不感兴趣。
答案 0 :(得分:3)
但是,如果我想换一个更大的价值怎么办?
你显然想要一个更长的字符串,而不是更大的值。
有没有办法解包并重新包装ELF?
取决于您所询问的ELF
类型。如果你有一个类型为ET_REL
的可重定位目标文件(通常是.o
),那么修改就相当简单了:你只需在文件末尾添加一个新的部分(通常字符串内容驻留在{{1部分,所以你要制作一个(更大的)副本,然后更新相应的部分标题.rodata
和.sh_offset
以指向文件中的正确位置。
另一方面,对于链接的 .sh_size
二进制文件(ELF
或ET_DYN
),任务非常复杂,非常难(几乎因为需要更新多个指针,并且内存中的位置不是任意的。