c - 编辑库存档中的字符串(filename.a)

标签 c linux hex static-libraries

我已经编译了C库,并且我有文件库示例filelib.a,并且我想编辑filelib.a中的字符串,因为我的源代码C已从我的PC中删除,我想在那里编辑字符串,在文件 filelib.a 有字符串“article saw”。 如果我 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。

谢谢。

最佳答案

如果您确实没有丝毫机会获取/恢复源代码,并且新字符串与原始字符串相同或更短,您可以使用十六进制编辑器,对字符串进行 binpatch,如果它比以前短,则用零填充(必须始终有至少一个终止零字节)。

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

关于c - 编辑库存档中的字符串(filename.a),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15587010/

相关文章:

python - 我的系统需要超过 32 个 USB 声卡

linux - Debian 命令行无法解析主机

java - 二维数组 : prefered way access items

c - 固定格式字符串中的 strptime 处理空间

c - 这个 1984 年国际混淆 C 代码竞赛获奖作品是如何运作的?

ios - Swift native 函数将数字作为十六进制字符串

python - 值错误 : non-hexadecimal number found in fromhex() arg at position

c++ - 将代码从 C++ 转换为 C : `a+b > b+a` where a and b are `string`

linux - 英特尔 CPU 缓存策略

string - 转义字符串文字中的十六进制值