是否可以修改精灵的 .rodata 部分中 char* 的值?
Is it possible to modify the value of a char* in .rodata section of an elf?
我知道您可以轻松地用相同大小的值修补 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
类型的可重定位 object 文件(通常是 .o
),那么修改是相当简单的:你只需将一个新的部分附加到文件的末尾(通常是字符串内容驻留在 .rodata
部分,所以你会制作它的(更大的)副本,然后更新相应部分 header 的 .sh_offset
和 .sh_size
以指向正确的位置文件。
另一方面,对于 linked ELF
二进制文件(ET_DYN
或 ET_EXEC
),任务非常复杂,以至于很难(几乎不可能),因为需要更新多个指针,并且内存中的位置不是任意的。
我知道您可以轻松地用相同大小的值修补 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
类型的可重定位 object 文件(通常是 .o
),那么修改是相当简单的:你只需将一个新的部分附加到文件的末尾(通常是字符串内容驻留在 .rodata
部分,所以你会制作它的(更大的)副本,然后更新相应部分 header 的 .sh_offset
和 .sh_size
以指向正确的位置文件。
另一方面,对于 linked ELF
二进制文件(ET_DYN
或 ET_EXEC
),任务非常复杂,以至于很难(几乎不可能),因为需要更新多个指针,并且内存中的位置不是任意的。