Verwenden Sie dd
oder xxd
(Teil von Vim), um beispielsweise ein Byte ( -l
) mit dem Offset 100 ( -s
) aus der Binärdatei zu lesen. Versuchen Sie:
xxd -p -l1 -s 100 file.bin
Um Hex-Offsets zu verwenden, können Sie in Bash diese Syntax verwenden $((16#64))
, z.
echo $((16#$(xxd -p -l1 -s $((16#FC)) file.bin)))
Hiermit wird das Byte im Offset gelesen FC
und im Dezimalformat gedruckt.
Alternativ verwenden Sie dd
wie:
dd if=file.bin seek=$((16#FC)) bs=1 count=5 status=none
Dadurch werden Rohdaten von 5 Bytes mit Hex-Offset ausgegeben FC
.
Dann können Sie es einer Variablen zuweisen, es funktioniert jedoch nicht, wenn Ihre Daten NULL-Bytes haben. Daher können Sie sie entweder überspringen ( xxd -a
) oder als Problemumgehung im einfachen hexadezimalen Format speichern.
Zum Beispiel:
Lesen Sie 10 Bytes bei Offset 10 in eine Variable ein, die Bytes im Hex-Format enthält:
hex=$(xxd -p -l 10 -s 10 file.bin)
Dann schreiben Sie sie in eine Datei oder ein Gerät:
xxd -r -p > out.bin <<<$hex
Hier sind einige nützliche Funktionen in Bash:
set -e
# Read single decimal value at given offset from the file.
read_value() {
file="$1"
offset="$2"
[ -n "$file" ]
[ -n "$offset" ]
echo $((16#$(xxd -p -l1 -s $offset "$file")))
}
# Read bytes in hex format at given offset from the file.
read_data() {
file="$1"
offset="$2"
count="$3:-1"
xxd -p -l $count -s $offset "$file"
}
Beispielnutzung:
read_value file.bin $((16#FC)) # Read 0xFC offset from file.bin.