首页 > 解决方案 > 如何使用 awk 替换二进制文件中的单个字节

问题描述

我正在尝试对 Linux 机器进行逆向工程以刷新我自己的固件,但为此我需要修补二进制文件。补丁实际上很简单,我只需要在已知偏移量处更改一个字节。但是,Linux 机器没有 dd、sed、awk 等任何程序。甚至没有 telnet(我通过串行与它通信)。但是,它确实有 sh。有没有办法仅使用 shell 命令替换已知偏移量的字节?

谢谢你。

标签: unixawksh

解决方案


如果您有head -c-cposix 未指定该选项)printf并且tail可用,那么这应该可以工作:

file=pathToYourFile
address=1234 # `address=1` changes the first byte
newByteOctal=567
{
  head -c "$((address-1))" "$file"
  printf "\\0$newByteOctal"
  tail -c "+$((address+1))" "$file"
} > patchedFiled

如果您没有head -c,但文件非常小并且在偏移量之前不(!)包含任何空字节,那么您可以替换head -c

printf "%.$((offset1based-1))s" "$(< "$file")"

推荐阅读