我知道您可以使用相同大小的值轻松修补 ELF。 但是,如果我想将其更改为更大的值怎么办?有没有办法解包和重新打包 ELF?
我对修补内存中的二进制文件不感兴趣。
最佳答案
But, what if I want to change it for a bigger value?
您显然想要一个更长 的字符串,而不是更大的值。
is there a way to un-pack and re-pack the ELF?
取决于您询问的是哪种ELF
。如果您有一个 ET_REL
类型的可重定位目标文件(通常是 .o
),那么修改是相当简单的:您只需在文件末尾附加一个新部分(通常是字符串内容位于 .rodata
部分,因此您可以复制它的(更大)副本,然后更新相应部分标题的 .sh_offset
和 .sh_size
指向文件中的正确位置。
另一方面,对于链接 ELF
二进制文件(ET_DYN
或 ET_EXEC
),任务是复杂到非常困难(几乎不可能),因为需要更新多个指针,并且内存中的位置不是任意的。
关于linux - 是否可以修改 Sprite 的 .rodata 部分中 char* 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36309089/