使用标准 Linux 命令行工具修改二进制文件中的字节
Modify a byte in a binary file using standard Linux command-line tools
我需要在某个偏移处修改二进制文件中的一个字节。
示例:
- 输入文件:
A.bin
- 输出文件:
B.bin
我需要从 A.bin
的偏移量 0x40c
处读取一个字节,将该字节的最低有效 2 位清零,然后写入文件 B.bin
等于 A.bin
, but 计算字节位于偏移 0x40c
.
- 我可以使用 Bash 和
printf
和 dd 等标准命令。
- 我很容易write a byte into a binary file,但我不知道怎么读
使用标准 Linux 命令行工具修改二进制文件中的一个字节。
# Read one byte at offset 40C
b_hex=$(xxd -seek $((16#40C)) -l 1 -ps A.bin -)
# Delete the three least significant bits
b_dec=$(($((16#$b_hex)) & $((2#11111000))))
cp A.bin B.bin
# Write one byte back at offset 40C
printf "00040c: %02x" $b_dec | xxd -r - B.bin
已在 Bash 和 Z shell (zsh
) OS X 和 Linux 上进行了测试。
最后一行解释:
00040c:
是 xxd
应该写入 的偏移量
%02x
将 $b
从十进制转换为十六进制
xxd -r - B.bin
: 反向十六进制转储 (xxd -r
) — 从标准输入 (-
) 中获取字节数和十六进制值并写入 B.bin
我需要在某个偏移处修改二进制文件中的一个字节。
示例:
- 输入文件:
A.bin
- 输出文件:
B.bin
我需要从 A.bin
的偏移量 0x40c
处读取一个字节,将该字节的最低有效 2 位清零,然后写入文件 B.bin
等于 A.bin
, but 计算字节位于偏移 0x40c
.
- 我可以使用 Bash 和
printf
和 dd 等标准命令。 - 我很容易write a byte into a binary file,但我不知道怎么读
使用标准 Linux 命令行工具修改二进制文件中的一个字节。
# Read one byte at offset 40C
b_hex=$(xxd -seek $((16#40C)) -l 1 -ps A.bin -)
# Delete the three least significant bits
b_dec=$(($((16#$b_hex)) & $((2#11111000))))
cp A.bin B.bin
# Write one byte back at offset 40C
printf "00040c: %02x" $b_dec | xxd -r - B.bin
已在 Bash 和 Z shell (zsh
) OS X 和 Linux 上进行了测试。
最后一行解释:
00040c:
是xxd
应该写入 的偏移量
%02x
将$b
从十进制转换为十六进制xxd -r - B.bin
: 反向十六进制转储 (xxd -r
) — 从标准输入 (-
) 中获取字节数和十六进制值并写入B.bin