bashを使用してバイトを変更すると、ddは機能しません。

bashを使用してバイトを変更すると、ddは機能しません。

Bashを使用してバイトを変更しようとしています。

したがって、オフセットの前のバイト、変更したいバイト、ファイルの残りの部分を記録します。

しかし、次のスクリプトは期待どおりに機能しません。

誰でも見ていただけますか?どの部分が間違っているのかわからない

#!/bin/bash

file=/etc/passwd
out=passwd.mod
offset=0x5

dd if="$file" of="$out" conv=notrunc bs=1 count=$(($offset - 1))
printf '\x41' | dd of="$out" conv=notrunc bs=1 seek=$(($offset))
dd if="$file" of="$out" conv=notrunc bs=1 skip=$(($offset + 1))

ベストアンサー1

私が正しく理解したら、これがあなたに役立つと信じています。

#!/bin/bash

file=passwd.orig
out=passwd.mod
offset=0x5

dd if="$file" of="$out" conv=notrunc bs=1 count=$(($offset))
printf '\x41' | dd of="$out" conv=notrunc bs=1 seek=$(($offset))
dd if="$file" of="$out" conv=notrunc bs=1 seek=$((offset+1)) skip=$(($offset + 1))

seek「書き込みヘッダー」を正しい位置に配置し、skipそのバイトが出力に(再び)書き込まれるのを防ぐ必要があります。


より良いもの

1バイトのみを変更(代替)すると、単純な(およびPOSIX)コマンドと同様に、ファイルのコピーから直接実行できます。

#!/bin/sh

file=passwd.orig      out=passwd.mod         offset=0x05

cp "$file" "$out"
printf '\x41' | dd of="$out" conv=notrunc bs=1 seek=$(($offset))

バイトを「挿入」するには、上記のコマンドが必要ですが、オフセットが一部変更されます。これが必要かどうか尋ねてください。

おすすめ記事