unix - 如何使用 awk 替换二进制文件中的单个字节
问题描述
我正在尝试对 Linux 机器进行逆向工程以刷新我自己的固件,但为此我需要修补二进制文件。补丁实际上很简单,我只需要在已知偏移量处更改一个字节。但是,Linux 机器没有 dd、sed、awk 等任何程序。甚至没有 telnet(我通过串行与它通信)。但是,它确实有 sh。有没有办法仅使用 shell 命令替换已知偏移量的字节?
谢谢你。
解决方案
如果您有head -c
(-c
posix 未指定该选项)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")"
推荐阅读
- .net-core - 有没有办法引用一个在发布管道下批准了特定阶段的 nuget 包?
- python - 打开显式保存为 UTF-8 的 CSV 仍显示其编码为 cp1252
- git - git pull 真的是 git fetch + git merge 吗?
- python - 在包中找不到方法
- sql-server - 如何防止用户在代理服务帐户的上下文中运行作业?
- asp.net - 从声明中读取值
- mongodb - 如何按小时聚合 MongoDB 文档?
- reactjs - 用去抖动反应受控输入
- umbraco - 我在 Umbraco version8 的设置页面中找不到布局文件,但它可以在网站上正常显示
- javascript - 如何通过javascript或CSS消除文本前后多余的空白