从命令行交换或替换二进制文件中的字节

问题描述 投票:0回答:2

这个线程中已经有一个漂亮的技巧了 使用 dd 将字节写入所需地址的二进制文件,有没有办法交换字节(例如交换 0x000xFF),或用常用工具(例如 dd)替换字节?

bash shell hex patch dd
2个回答
2
投票
请您尝试以下操作:

xxd -p input_file | fold -w2 | perl -pe 's/00/ff/ || s/ff/00/' | xxd -r -p > output_file

  • xxd -p file
     以连续十六进制转储方式转储二进制数据 
    file
  • fold -w2
     每两个字符(= 每个字节)换行输入行。
  • perl -pe 's/00/ff/ || s/ff/00/'
     交换输入字符串中的 
    00
    ff
    ||
     逻辑用作 
    if .. else ..
     条件。否则输入
    00
    一旦转换为 
    ff
     并立即再次转换回 
    00
  • xxd -r -p
    xxd -p
     的反转版本,用于转换输入
    将十六进制字符串转换为二进制文件。

0
投票

dd

 通过 
conv=swab
 内置了此功能,“交换每对输入字节”。  如果您需要将文件格式从“字节交换”转换为“大端”(反之亦然),它非常有用:

dd if=file1.v64 of=file2.z64 conv=swab
    
© www.soinside.com 2019 - 2024. All rights reserved.