Sử dụng dd
hoặc xxd
(một phần của Vim), ví dụ để đọc một byte ( -l
) tại offset 100 ( -s
) từ tệp nhị phân thử:
xxd -p -l1 -s 100 file.bin
để sử dụng offset hex, trong Bash bạn có thể sử dụng cú pháp này $((16#64))
, ví dụ:
echo $((16#$(xxd -p -l1 -s $((16#FC)) file.bin)))
trong đó đọc byte ở offset FC
và in nó ở định dạng thập phân.
Hoặc sử dụng dd
, như:
dd if=file.bin seek=$((16#FC)) bs=1 count=5 status=none
sẽ kết xuất dữ liệu thô 5 byte ở phần bù hex FC
.
Sau đó, bạn có thể gán nó thành biến, tuy nhiên nó sẽ không hoạt động khi dữ liệu của bạn có byte NULL , do đó bạn có thể bỏ qua chúng ( xxd -a
) hoặc như cách giải quyết, bạn có thể lưu trữ chúng ở định dạng thập lục phân đơn giản.
Ví dụ:
Đọc 10 byte ở offset 10 thành biến chứa byte ở định dạng hex:
hex=$(xxd -p -l 10 -s 10 file.bin)
Sau đó viết chúng vào tập tin hoặc thiết bị:
xxd -r -p > out.bin <<<$hex
Dưới đây là một số hàm hữu ích trong 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"
}
Sử dụng mẫu:
read_value file.bin $((16#FC)) # Read 0xFC offset from file.bin.