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

时间:2017-01-23 12:22:11

标签: bash shell binary edit patch

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

示例:

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

我需要从0x40c读取偏移A.bin的字节,清除此字节的0个最低2位,然后写入B.bin等于A.bin的文件},,计算出的字节位于偏移0x40c

1 个答案:

答案 0 :(得分:3)

# 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

在OSX和Linux上测试bashzsh

最后一行解释:

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