Verwenden Sie ddoder 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 FCund im Dezimalformat gedruckt.
Alternativ verwenden Sie ddwie:
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.