【问题标题】:Replace text in .so file using Vim使用 Vim 替换 .so 文件中的文本
【发布时间】:2024-01-21 10:55:02
【问题描述】:

我的需要是替换 .so 文件中某个文本的所有大小写。

我使用 vim 打开文件,然后使用:%!xxd 将其转换为可读格式,如下面的示例输出:

000001a0: f217 4dce 4321 4118 3940 1326 9a3a 62f6  ..M.C!A.9@.&.:b.                                                                                                         
000001b0: 2fde ecdd 0000 0000 0300 0000 a800 0000  /...............                                                                                                         
000001c0: 0100 0000 0600 0000 88c2 2001 0007 4109  .......... ...A.                                                                                                         
000001d0: a800 0000 ac00 0000 ae00 0000 4245 d5ec  ............BE..                                                                                                         
000001e0: bae3 927c 7092 55aa 694a b111 d871 581c  ...|p.U.iJ...qX.                                                                                                         
000001f0: b98d f10e ebd3 ef0e 0000 0000 0000 0000  ................    

我的问题是,使用这种结构,我无法搜索换行符,从而无法通过搜索/替换结果来替换文本。

有没有办法让 vim 只显示十六进制值,而不显示换行符?

也欢迎任何其他允许在换行符上替换文本的解决方案(因此可以一次性完成)。

谢谢!

【问题讨论】:

  • 您可以通过告诉 xxd 每行执行超过 16 个字节并将它们全部组合在一起而不用空格来减少糟糕的情况::%!xxd -c 60 -g 60
  • 谢谢,这肯定会有所帮助。为了在完成后将其反转,:%!xxd -r -c 60 -g 60 是否有效?它执行了一个没有错误的反转,但我不确定它是否正确。
  • 您确定文本编辑器会正确保存二进制文件吗?

标签: linux vim hex .so


【解决方案1】:

您可以将sed multi-line searchhex escape notation 结合使用来搜索和替换任何文件中的任何十六进制模式。

【讨论】:

  • 对不起,我对 linux 有点陌生。你能分享一个你将如何使用它的例子吗?谢谢(: