linux - 是否可以修改 Sprite 的 .rodata 部分中 char* 的值?

标签 linux elf disassembly patch

我知道您可以使用相同大小的值轻松修补 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_DYNET_EXEC),任务是复杂到非常困难(几乎不可能),因为需要更新多个指针,并且内存中的位置不是任意的。

关于linux - 是否可以修改 Sprite 的 .rodata 部分中 char* 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36309089/

相关文章:

C++ 程序以代码 01 退出,未执行任何代码

linux - 读取远程文件的 block 而不传输整个文件?

linux - 添加一个带有字符串的数字变量

linux - 确定 Linux 二进制文件的直接共享对象依赖关系?

linux - 为什么 LD_PRELOAD 对没有 shebang 的脚本不生效?

linux - 获取ELF文件信息

c - radare2:r_reg_get:断言 'reg && name' 失败(第 296 行)

c++ - 手动反编译引用

android - 防止/使修补二进制程序集变得困难

linux - 通讯命令 - 不必要的限制?