You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从八进制转储构建文件?解析od输出还原原二进制文件

解析od输出并重建原始二进制文件的方法

一、用od自身反向还原

GNU od自带反向读取功能,可直接解析自身输出并还原原始内容:

# 还原为文本格式
od -v -An -t o2 od.version.txt | od -v -An -t c -r

# 还原为二进制文件
od -v -An -t o2 od.version.txt | od -v -An -t x1 -r > restored.bin

解释:第一个od提取所有八进制数值(忽略地址标记和换行),第二个od通过-r开启反向解析,-t c指定输出为字符格式,-t x1则输出十六进制字节。

二、用xxd结合脚本实现

xxd默认处理十六进制,可先将od的八进制输出转换为十六进制,再用xxd还原:

awk '{for(i=2;i<=NF;i++) printf "%04x ", strtonum("0"$i)}' od.version.txt | xxd -r -p > restored.txt

解释:awk遍历每行的八进制数(跳过开头的地址字段),将其转换为4位十六进制(对应2字节),再通过xxd -r -p读取十六进制流并还原为原始二进制。

三、用Python脚本实现

通过Python直接解析od输出,拆分每个八进制数为对应字节并写入文件:

with open('od.version.txt', 'r') as f_in, open('restored.txt', 'wb') as f_out:
    for line in f_in:
        tokens = line.strip().split()
        if not tokens:
            continue
        # 跳过地址字段,处理每个八进制数值
        for oct_str in tokens[1:]:
            # 补前导零确保是6位八进制格式
            oct_str = oct_str.zfill(6)
            # 拆分为两个3位八进制的字节
            byte1 = int(oct_str[:3], 8)
            byte2 = int(oct_str[3:], 8)
            f_out.write(bytes([byte1, byte2]))

运行脚本后,restored.txt即为还原后的原始文本。

四、用Awk脚本实现

用Awk拆分八进制数并输出对应字符:

#!/usr/bin/awk -f
{
    for (i=2; i<=NF; i++) {
        # 补前导零到6位
        oct_full = sprintf("%06s", $i)
        # 拆分前后3位八进制,转换为字节
        byte1 = strtonum("0" substr(oct_full, 1, 3))
        byte2 = strtonum("0" substr(oct_full, 4, 3))
        # 输出字符
        printf "%c%c", byte1, byte2
    }
}

保存为od-restore.awk,执行以下命令还原:

awk -f od-restore.awk od.version.txt > restored.txt

内容的提问来源于stack exchange,提问作者mvanle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:37:02