-2

我已经编译了 C 库,并且我有文件库示例 filelib.a ,并且我想在 filelib.a 中编辑字符串,因为我的源代码 C 已从我的 PC 中删除,我想在文件 filelib 中编辑字符串。 a 有字符串“看到的文章”。如果我 grep:

$ grep -R "/etc/resolv.conf" *
Binary file filelib.a matches
Binary file filelib.so matches

所以文件filelib.a和filelib.so中有字符串“/etc/resolv.conf”。如何编辑和替换二进制文件filelib.a和filelib.so中的字符串,例如我想将字符串“/etc/resolv.conf”替换为“/system/etc/resolv.conf”

我用十六进制编辑器 BLESS 进行了编辑,但是如果我使用这个库,我会得到错误:

could not read symbols: Malformed archive
collect2: error: ld returned 1 exit status

我正在使用linux ubuntu。

谢谢。

4

3 回答 3

2

如果您真的没有丝毫机会获得/恢复源代码,并且新字符串与原始字符串一样长或更短,您可以使用十六进制编辑器打开存档,对字符串进行二进制修补并用零填充如果它比以前短(必须始终至少有一个终止零字节)。

如果您想将字符串更改为更长的内容,这并不容易 - 您最好的机会可能是提取存档,反汇编您要在其中进行更改的目标文件,更改程序集,然后重新组装并用于ar更新修改库中的目标文件。

于 2013-03-23T13:08:05.207 回答
0

只要您要更改的字符串短于或等于二进制文件中的字符串,您就可以使用十六进制编辑器替换该字符串,并将任何扩孔字符替换为\0.

于 2013-03-23T13:03:38.517 回答
0

我相信Bless Hex Editor应该为您完成这项工作。

只要确保您不更改文件的长度。如果插入终止符,则可以使用比旧字符串短的字符串'\0',但这完全取决于程序如何使用它,所以我建议不要这样做。

于 2013-03-23T13:06:08.453 回答