是否可以在精灵的.rodata部分修改char *的值?

时间:2016-03-30 12:37:03

标签: linux elf disassembly patch

我知道您可以使用相同大小的值轻松修补ELF。 但是,如果我想改变它以获得更大的价值呢?有没有办法打开包装并重新包装ELF?

我对在内存中修补二进制文件不感兴趣。

1 个答案:

答案 0 :(得分:3)

  

但是,如果我想换一个更大的价值怎么办?

你显然想要一个更长的字符串,而不是更大的值。

  

有没有办法解包并重新包装ELF?

取决于您所询问的ELF类型。如果你有一个类型为ET_REL的可重定位目标文件(通常是.o),那么修改就相当简单了:你只需在文件末尾添加一个新的部分(通常字符串内容驻留在{{1部分,所以你要制作一个(更大的)副本,然后更新相应的部分标题.rodata.sh_offset以指向文件中的正确位置。

另一方面,对于链接的 .sh_size二进制文件(ELFET_DYN),任务非常复杂,非常难(几乎因为需要更新多个指针,并且内存中的位置不是任意的。