使用标准的 linux 命令行工具修改二进制文件中的一个字节

mas*_*sti 7 binary bash shell patch edit

我需要在某个偏移量处修改二进制文件中的一个字节。

例子:

  • 输入文件: A.bin
  • 输出文件: B.bin

我需要在偏移到读一个字节0x40cA.bin,清楚的这个字节的0至少显著2个比特,然后写入文件B.bin等于A.bin与计算出的字节偏移量0x40c

han*_*ast 8

# read 1 byte at offset 40C
b_hex=$(xxd -seek $((16#40C)) -l 1 -ps A.bin -)
# delete 3 least significant bits
b_dec=$(($((16#$b_hex)) & $((2#11111000))))
cp A.bin B.bin
# write 1 byte back at offset 40C
printf "00040c: %02x" $b_dec | xxd -r - B.bin
Run Code Online (Sandbox Code Playgroud)

经测试,在bashzsh上OSX和Linux操作系统。

最后一行解释了:

  • 00040c:是偏移量xxd应该写入
  • %02x$b从十进制转换为十六进制
  • xxd -r - B.bin: 反向十六进制转储 ( xxd -r),取行号和十六进制标准输入 ( -) 并写入B.bin