我需要进行反向十六进制转储,将 nvram 内存块十六进制转储转换为二进制文件(.bin)。内存块转储如下所示:
00010000 4293 D306 0123 195A 3360 18EB 66D0 60CB
00010010 E003 68C9 42B9 D1EE 1C0F 2201 4494 4663
00010020 B2DC 1C2B 335C 781B 42A3 D8C6 1C2B 33A0
00010030 1C34 601E E039 4B21 681B 930A 7822 920B
00010040 8863 88A2 469C 23F8 021B 421A D001 22A7
.... ....
我应该只使用这个 xxd 命令,而不使用其他选项吗?
xxd -r block.txt block.bin
最佳答案
你可以尝试一下。我做了以下测试:
$ echo "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed" | xxd
0000000: 4c6f 7265 6d20 6970 7375 6d20 646f 6c6f Lorem ipsum dolo
0000010: 7220 7369 7420 616d 6574 2c20 636f 6e73 r sit amet, cons
0000020: 6563 7465 7475 7220 6164 6970 6973 6369 ectetur adipisci
0000030: 6e67 2065 6c69 742c 2073 6564 0a ng elit, sed.
如您所见,它与您的输入有所不同,因此我做了一些修改:
$ echo "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed" | xxd -u |
sed 's/^\(.\{48\}\).*$/\1/1; s/\(\S\s\)\(\S\)/\1 \2/g; s/:/ /;'
0000000 4C6F 7265 6D20 6970 7375 6D20 646F 6C6F
0000010 7220 7369 7420 616D 6574 2C20 636F 6E73
0000020 6563 7465 7475 7220 6164 6970 6973 6369
0000030 6E67 2065 6C69 742C 2073 6564 0A
这与您所拥有的非常相似。现在我将尝试恢复该状态:
$ echo "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed" | xxd -u |
sed 's/^\(.\{48\}\).*$/\1/1; s/\(\S\s\)\(\S\)/\1 \2/g; s/:/ /;' | xxd -r
xxd: sorry, cannot seek backwards.
这太糟糕了。因此,我们将尝试恢复更改,以便为 xxd -r 获得合适的输入:
$ echo "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed" | xxd -u |
sed 's/^\(.\{48\}\).*$/\1/1; s/\(\S\s\)\(\S\)/\1 \2/g; s/:/ /;' |
sed 's/\s\+/ /g; s/^\(\S\+\)\s/\1: /'
0000000: 4C6F 7265 6D20 6970 7375 6D20 646F 6C6F
0000010: 7220 7369 7420 616D 6574 2C20 636F 6E73
0000020: 6563 7465 7475 7220 6164 6970 6973 6369
0000030: 6E67 2065 6C69 742C 2073 6564 0A
而且,至少对于这个例子来说,它是有效的:
$ echo "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed" | xxd -u |
sed 's/^\(.\{48\}\).*$/\1/1; s/\(\S\s\)\(\S\)/\1 \2/g; s/:/ /;' |
sed 's/\s\+/ /g; s/^\(\S\+\)\s/\1: /' | xxd -r
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
总而言之,您可以尝试以下操作:
sed 's/\s\+/ /g; s/^\(\S\+\)\s/\1: /' block.txt | xxd -r > block.bin
关于linux - 将十六进制转储转换回其原始二进制形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33426353/