# If you only have hexdump
hexdump -ve '1/1 "%.2x"' mybinaryfile > mydump
# This gives exactly the same output as:
xxd -p mybinaryfile > mydump
# Or, much slower:
od -v -t x1 -An < mybinaryfile | tr -d "\n " > mydump
# Or, the fastest:
perl -pe 'BEGIN{$/=\1e6} $_=unpack "H*"' < mybinaryfile > mydump
# Or, if you somehow have Python, and not Perl:
python -c "print(open('mybinaryfile','rb').read().hex())" > mydump
8条答案
按热度按时间gdrx4gfi1#
有一个类似的工具叫做
xxd
,如果你只使用一个文件名运行xxd
,它会以一个相当标准的十六进制转储格式转储数据:现在,如果使用
-r
选项将输出通过管道传回xxd
,并将其重定向到一个新文件,则可以将十六进制转储转换回二进制:laawzig22#
我编写了一个简短的AWK脚本,它将
hexdump -C
输出反转为原始数据。处理'*'重复标记并生成原始数据(即使是二进制)。
hexdump -C
和reverse-hexdump.sh
构成数据往返对。可从以下位置获得:wgeznvg73#
还原
file
,仅给定hexdump file
的输出如果您只有
hexdump file
的输出,并且想要恢复原始文件,首先注意hexdump's default output depends on the endianness of the system you ran hexdump on!如果您有权访问创建转储的系统,则可以使用以下命令确定其字节序:
反向小端十六进制转储
这是最常见的情况。所有的x86/x64系统都是little-endian。如果你不知道运行
hexdump file
的系统的字节序,试试这个。sed
部分将hexdump
的格式转换为xxd
的格式,至少到目前为止xxd -r
可以工作。反转大端十六进制转储
已知缺陷(参见备注部分)
*
对原始文件的重复部分进行hexdump
编辑,则无法正确还原这些部分。您可以通过运行以下命令来检查转储是否存在上述问题:
一开始就创建hexdump的更好选择
除了非posix的
xxd
(因此不那么可移植)之外,还有od
(octaldump),它应该可以在所有类Unix系统上使用,因为posix指定了它:将打印一个x十进制转储,将数字分组为单个字节(
-tx1
),带有noA地址前缀(-An
,类似于xxd -p
),并且不将重复部分缩写为*
(-v
)。您可以使用xxd -r -p
反转此类转储。vfh0ocws4#
作为一个在bash上很烂的人,我无法理解已经发布的例子。下面是我最初搜索时可能会帮助我的东西:
将文本文件“AYE.TXT”转换为十六进制转储文件“BEE.TXT”
获取十六进制转储文件(“BEE.TXT”)并将其转换回ASCII文件“CEE.TXT”
现在您已经有了一些简单的工作代码,请随时查看命令行中的“xxd -help”,了解所有这些标志的作用(这部分比较容易,困难的部分是bash语法的细节)。
7ajki6be5#
有很多更优雅的方法可以实现这一点,但我很快就找到了一个方法,当从
hexdump -C some_file.bin
生成的十六进制转储文件中重新生成二进制文件时,它可以为我工作(tm):基本上,使用2个
sed
进程,每个进程处理每行的一部分。很难看,但有人可能会发现它很有用。pokxtpni6#
如果没有
xxd
,请使用hexdump
、od
、perl
或python
:下面的输出都给予相同的:
然后,您可以复制和粘贴,或通过管道传输输出,并使用以下命令转换回:
hexdump
命令几乎在任何地方都可用,并且通常是默认busybox
的一部分-如果它没有链接,您可以尝试运行busybox hexdump
或busybox xxd
。如果
xxd
不可用于反转数据,则可以尝试awk过去的日子:Z调制解调器
在过去,我们使用X/Y/Zmodem,它包含在
lrzsz
包中,可以容忍有损通信-但它是一个双向协议,因此二进制文件需要同时运行,并且需要双向通信:幸运的是,screen支持接收Zmodem,所以如果你正在使用screen会话:
然后键入
Ctrl+A
和:
,再键入zmodem catch
和Enter
。然后在远程主机的屏幕中输入:当您看到以“!!!"开头的字符串时,请按
Enter
。当您看到“Transfer Complete”时,如果您希望正常继续终端会话,您可能希望运行
reset
。ar7v8xwq7#
此程序将
hexdump -C
输出反转为原始数据。参见https://github.com/zhouzq-thu/unhexdump!
8wtpewkr8#
我找到了更简单解决办法:
二进制十六进制
第一个月
己二苯
echo -n "616263" | grep -Eo ".{2}" | sed 's/\(.*\)/\\x\1/' | tr -d '\n' | xargs -0 echo -ne