我已经编译了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。
感谢。
答案 0 :(得分:2)
如果确实没有机会获得/恢复soirce代码,并且新字符串与原始字符串相同或更短,则可以使用以下命令打开存档十六进制编辑器,如果它比以前更短,则用双字节填充字符串和填充(必须始终至少有一个终止零字节)。
如果你想把字符串更改为更长的东西,这并不容易 - 最好的机会可能是提取存档,反汇编你想要进行更改的目标文件,更改程序集,然后重新组装并使用ar
更新库中修改后的目标文件。
答案 1 :(得分:0)
只要您要更改的字符串短于或等于二进制文件中的字符串,您就可以使用十六进制编辑器替换字符串,并将任何扩孔字符替换为\0
。< / p>
答案 2 :(得分:0)
我相信Bless Hex Editor应该为你做好工作。
只需确保不要更改文件的长度。如果插入'\0'
终止符,可能可以使用更短的字符串,但这一切都取决于程序如何使用它,所以我建议反对。