我需要在某个偏移处修改二进制文件中的一个字节。
示例:
A.bin
B.bin
我需要从0x40c
读取偏移A.bin
的字节,清除此字节的0个最低2位,然后写入B.bin
等于A.bin
的文件},但,计算出的字节位于偏移0x40c
。
printf
和dd
。答案 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上测试bash
和zsh
。
最后一行解释:
00040c:
是应写入xxd
%02x
将$b
从dec转换为十六进制xxd -r - B.bin
:反向十六进制转储(xxd -r
),取行号和十六进制标准(-
)并写入B.bin