编辑库归档中的字符串(filename.a)

时间:2013-03-23 12:53:58

标签: c linux hex static-libraries

我已经编译了C库,我有文件库示例filelib.a,我想编辑filelib.a中的字符串,因为我的源代码C已从我的PC中删除,我想在那里编辑字符串,In file filelib.a有字符串“article seen”。 如果我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,但如果我使用这个lib我会收到错误:

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

我正在使用linux ubuntu。

感谢。

3 个答案:

答案 0 :(得分:2)

如果确实没有机会获得/恢复soirce代码,并且新字符串与原始字符串相同或更短,则可以使用以下命令打开存档十六进制编辑器,如果它比以前更短,则用双字节填充字符串和填充(必须始终至少有一个终止零字节)。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我相信Bless Hex Editor应该为你做好工作。

只需确保不要更改文件的长度。如果插入'\0'终止符,可能可以使用更短的字符串,但这一切都取决于程序如何使用它,所以我建议反对。