鉴于shell本身能力有限,不能用重定向的方法来实现较为正式的2进制文件修改。google无果。下面的实现还是比较满意的:
1. printf或者echo -n -e来打印需要的内容到文件
2. dd插入内容。
比如想在一个文件a.bin的0x300位置把后面的10个字节修改成0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0x0
#!/bin/sh
printf "\x1\x2\x3\x4\x5\x6\x7\x8\x9\x0" > inject.bin
dd if=inject.bin of=a.bin seek=$((0x300)) bs=1 conv=notrunc