【问题标题】:editing hex / binary files in limited linux在有限的 linux 中编辑十六进制/二进制文件
【发布时间】:2015-04-13 10:41:35
【问题描述】:

我的 linux 非常有限,几乎没有基本的 linux 命令。 我需要替换十六进制/二进制文件中的一些字符:

输入:

# hexdump -C block.bin
00000000  11 11 50 04 42 00 00 00  58 00 00 00 3c 0e e2 d4  |..P.B...X...<...|
00000010  50 0b 00 00 00 80 00 00  00 00 00 00 00 00 d0 d7  |P...............|
00000020  1f 09 00 00 00 00 02 00  00 00 00 04 ff ff ff ff  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040  28 31 98 5b d3 0e 05 00  00 00 00 00 00 00 00 00  |(1.[............|
00000050  00 00 00 00 00 00 00 00  64 00 00 00 00 00 10 00  |........d.......|
00000060  00 ff ff ff ff 00 00 00  00 03 01 0d 03 01 0d 01  |................|
00000070  00 00 00 00 0c 00 01 02  00 00 00 00 00 ff ff ff  |................|
00000080  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00000180  00 00 20 00 00 00 ff ff  ff ff 01 00 00 0c 00 00  |.. .............|
00000190  04 00 00 00 02 00 00 04  00 00 00 00 00 00 ff ff  |................|
000001a0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00000200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

我需要更改以下内容:

00000060  00 ff ff ff ff 00 00 00  00 03 01 0d 03 01 0d 01  |................|
00000070  00 00 00 00 0c 00 01 02  00 00 00 00 00 ff ff ff  |................|

到(并重写回同一个文件):

00000060  00 ff ff ff ff 00 00 00  00 03 01 0d 03 01 0d 02  |................|
00000070  01 00 00 00 0c 00 01 02  00 00 00 00 00 ff ff ff  |................|

就像我说过的,我有几个命令:hexdump、od、vi、nano、awk、sed、python。 浏览互联网,许多解决方案需要第三方安装或使用“xxd”。两个我都不能用。

有什么建议吗?

谢谢!

【问题讨论】:

  • 请详细说明具体要求。是否必须将固定位置的字节设置为固定值(0000006f02),还是更复杂?新值是否依赖于旧值,您是否在寻找特定模式而不是固定位置,诸如此类。
  • 没有xxd,看起来你必须自己编写那个工具——所以你想要一门编程语言。在此处查看答案:reading-binary-file-in-python 开始使用。
  • 位置是固定的。 0000006f00000070 要求是两个字节都加 1。thx
  • 很遗憾,我对 Python 的了解为零。
  • 这个系统没有perl

标签: linux awk sed binary hex-editors


【解决方案1】:

我不认为用 sed 或 awk 尝试这个是一个理智的想法,所以我们坚持使用 python,它对于这项任务来说肯定足够强大。我的想法是这样的:

#!/usr/bin/python

# open file in binary mode for reading and writing    
f = open("block.bin", "r+b")

# seek to position and read two bytes
f.seek(0x6f)
data = f.read(2)

# seek to position again
f.seek(0x6f)

# and write the transformed characters back
for d in data:
    f.write(chr(ord(d) + 1))

f.close()

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 2016-08-12
    • 2016-08-10
    • 2011-03-14
    • 2014-10-30
    • 2012-05-10
    • 2017-02-01
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多