Làm thế nào để giải thích một kết xuất bát phân hoặc hex của một tệp nhị phân?


13

Tệp nhị phân có các chuỗi và một số số, Nếu tôi làm od -c filenamehoặc strings filename, tôi có thể thấy các chuỗi đúng. Nhưng, những con số thì sao? Họ đang ở một số định dạng kỳ lạ.

Các văn bản sau khi làm od -c filenamelà như thế này:

0000000 036 \ 0 032 004 SD \ 0 \ 0 \ 0 \ 0 seq 1
0000020 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ t \ 0 ó 002 3 001
0000040 & \ 0 032 \ f O 2 006 \ 0 \ 0 \ 0 osfus 1
0000060 ó 002 3 001 = \ r \ 0 \ 0 \ t \ 0 \ 0 @ 3 ×
0000100 233 º 004 \ 0 é 003 \ 0 \ 0 & \ 0 032 \ f O 2 7 \ 0
0000120 \ 0 \ 0 osfeu 1 ó 002 3 001 é 235
0000140 \ 0 \ 0 035 003 \ 0 @ 3 × 233 º 004 \ 0 \ a \ 0 \ 0
0000160 ä \ 0 032 \ f O r E \ 0 \ 0 \ 0 osfap 1

Làm thế nào để giải mã điều này?

Tôi thậm chí đã thử hexdump -C filename

Đầu ra là như thế này:

00000000 1e 00 1a 04 53 44 00 00 00 00 73 65 71 31 20 20 | .... SD .... seq1 |
00000010 20 20 00 00 00 00 00 00 00 09 00 f3 02 33 01 | .......... ó.3. |
00000020 26 00 1a 0c 4f 32 06 00 00 00 6f 73 66 75 73 31 | & ... O2 .... osfus1 |
00000030 20 20 f3 02 33 01 ff 0d 00 00 09 00 00 40 33 d7 | ó.3.ÿ ...... @ 3 × |
00000040 9b ba 04 00 e9 03 00 00 26 00 1a 0c 4f 32 37 00 | .º..é ... & ... O27. |
00000050 00 00 6f 73 66 65 75 31 20 20 f3 02 33 01 e9 9d | ..osfeu1 ó.3.é. |
00000060 00 00 1d 03 00 40 33 d7 9b ba 04 00 d1 07 00 00 | ..... @ 3 × .º..Ñ ... |
00000070 e4 00 1a 0c 4f 72 45 00 00 00 6f 73 66 61 70 31 | ä ... OrE ... osfap1 |

Để làm rõ, tệp chính là một tệp thông thường có một thuộc tính đang hiển thị là một định dạng kỳ lạ, vì vậy chúng tôi đang xem xét tệp thô / nhị phân.

Thực hiện đổ bát phân trên tệp thông thường, giải quyết vấn đề xem.

Với grep 'id=123' regular_file | head -1 | od -c, tôi đã có thể thấy những con số trong đó. Tôi đã mong đợi 1, nó cho chúng tôi thấy là 001.


4
Để "diễn giải" nó, bạn cần biết nó được lưu trữ ở định dạng nào.
Kevin

Tôi đã nói rằng các số ở định dạng nhị phân, cụ thể là số nguyên nhị phân. Điều đó có giúp gì cho câu hỏi của tôi không?

Không, mọi thứ trên máy tính là nhị phân, bạn cần biết bố cục của tệp - mỗi số ở đâu, mỗi số có ý nghĩa gì. Bạn lấy tập tin này ở đâu?
Kevin

Chỉ cần làm rõ, tôi có tập tin bình thường là tốt. [seq = 132253932] [Major = S] [Minor = D] [src = seq1] [Id = 0] [ref = 0] [Date = 20120307] Một trong các thẻ trong tệp bình thường có giá trị là ascii, tệp bình thường thường được sử dụng để đọc nhật ký, nhưng để chắc chắn, nó có giá trị chính xác nhưng ở định dạng khác nhau, chúng tôi đang xem xét tệp nhị phân này.

Phía bên phải của kết xuất hex "tiêu chuẩn" thường là biểu tượng ASCII của dữ liệu đó. Nếu bạn thấy văn bản này: not texttrong chế độ xem ASCII đó, điều đó không có nghĩa đó là ASCII cho chương trình đọc tệp. ví dụ. Số 7957706749327538292 khi được mã hóa dưới dạng số nguyên không dấu 64 bit nhỏ. trông như thế này trong khung nhìn ASCII : not text.
Peter.O

Câu trả lời:


4

Có rất nhiều cách lưu trữ số - ASCII (có thể có các biến thể cụ thể của miền địa phương, chẳng hạn như sử dụng ',' để tách phần phân số HOẶC như một nhóm hàng nghìn), số nguyên nhị phân (số bit thay đổi) / float / double (tất cả có thể thay đổi tùy thuộc vào kiến ​​trúc endian và liệu phần mềm tạo tệp có chính thức biểu diễn), BCD (không nén, đóng gói, điểm cố định và các biến thể khác), thập phân mã hóa nhị phân ...

Không có tiêu chuẩn.


18

Một trong những điều đầu tiên tôi phải ghi nhớ cho khoa học máy tính là Dữ liệu + Phiên dịch = Thông tin hữu ích . Một hệ quả của điều này là nếu bạn thiếu Dữ liệu hoặc Giải thích, bạn không có gì. Các dữ liệu không thể cho bạn biết làm thế nào để giải thích nó. (bạn có thể có siêu dữ liệu cho bạn biết điều này, nhưng sau đó bạn cũng cần biết cách diễn giải siêu dữ liệu )

Trong các trường hợp, tôi khuyên bạn nên thử điều này:

file filename

Nếu nó xuất hiện với một cái gì đó như:

filename: data

và bạn hoàn toàn không biết định dạng là gì, nó thuộc chương trình gì, công dụng của nó là gì, hoặc bất cứ điều gì về nội dung của nó filename, thì có lẽ bạn nên từ bỏ.

Đầu ra kết xuất

od(kết xuất bát phân) tạo ra kết xuất văn bản và bát phân lai. Non-số là những nhân vật hoặc in như o, s, f, nhân vật vv, hoặc không thể in được như \0(ASCII 0, NUL), hoặc \a(ASCII 7, BEL), hoặc số liệu trong cơ sở 8, với C tiền tố tiêu chuẩn 0(ví dụ 032= 26 ở thập phân). Tệp của bạn được hiểu là một luồng byte 8 bit .

Đầu ra Hex

hexdumptạo ra kết xuất hex truyền thống, với một cột liệt kê các byte 8 bit theo hệ thập lục phân, cột còn lại hiển thị các ký tự ASCII mà các byte này tương ứng với ot, nếu có (nếu giá trị byte là ký tự ASCII không in được hoặc hoàn toàn không phải là ký tự ASCII , .được hiển thị tại vị trí đó). Một lần nữa, tệp của bạn được hiểu là một luồng byte 8 bit .

Số nguyên

Nếu tệp của bạn bao gồm 100% số nguyên nhị phân (nghĩa là một mảng không có tiêu đề, thống nhất, một chiều của một số loại biểu diễn số nguyên), thì bạn phải tự trả lời tất cả các câu hỏi sau:

  • Chúng có phải là số thập phân nhị phân hay mã nhị phân (BCD) đúng không? (có thể là nhị phân)
  • Chúng rộng bao nhiêu trong bit?
  • Nếu chiều rộng của chúng không phải là bội số của 8, chúng có được đóng gói bit như tin nhắn SMS hoặc Base64 hoặc căn chỉnh byte không?
  • Nếu chiều rộng của chúng là 8 bit trở lên, thứ tự byte là gì? Đó có phải là Big Endian, Little Endian hay một trong những loại khác hiếm hơn không?
  • Là số nguyên được ký, hoặc không dấu ?
  • Nếu họ đã ký, họ được đại diện trong hai phần bổ sung (nhiều khả năng), hoặc phần bổ sung của một người , hoặc một cái gì đó hiếm và lạ?

Có lẽ nhiều hơn tôi đang quên ngay bây giờ.

Và đây chỉ là một mảng số nguyên thống nhất, xuất phát từ một kiến ​​trúc phổ biến, hiện đại của máy tính. Nếu dữ liệu của bạn có bất kỳ sự phức tạp nào, mọi thứ sẽ trở nên quá nhiều lông, nó sẽ nhanh chóng trở nên dễ dàng hơn khi trúng xổ số hơn là chỉ cần đoán định dạng. Và bạn phải đoán (một phỏng đoán có giáo dục, nhưng đoán), trừ khi bạn biết định dạng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.