İkili bir dosyanın sekizli veya onaltılık dökümü nasıl yorumlanır?


14

İkili dosya dizeleri ve bazı numaraları vardır, Ben yaparsam od -c filenameveya strings filename, dizeleri düzgün görebiliyorum. Peki ya sayılar? Garip bir biçimde.

Yaptıktan sonra metin od -c filenameşu şekildedir:

0000000 036 \ 0 032004 SD \ 0 \ 0 \ 0 \ 0 sıra 1
0000020 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ t \ 0 ó 002 3001
0000040 & \ 0 032 \ f O 2 006 \ 0 \ 0 \ 0 osfus 1
0000060 ó 002 3001 ÿ \ 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 3001 é 235
0000140 \ 0 \ 0 035003 \ 0 @ 3 × 233 º 004 \ 0 Ñ \ a \ 0 \ 0
0000160 ä \ 0 032 \ f O r E \ 0 \ 0 \ 0 osfap 1

Bunu nasıl çözebilirim?

Denedim bile hexdump -C filename

Çıktı şöyle:

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 00 09 00 f3 02 33 01 | .......... O.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 × Bu |
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 | E ... OrF ... osfap1 |

Açıklığa kavuşturmak için, normal bir dosya olan ana dosyanın görüntülenen bir niteliği vardı, bu yüzden ham / ikili dosyaya bakıyoruz.

Normal dosyada sekizli dökümü yapmak, görüntüleme sorununu çözdü.

İçinde grep 'id=123' regular_file | head -1 | od -changi numaranın olduğunu görebildim. 1 bekliyordum, bize 001 olarak gösterdi.


4
"Yorumlamak" için hangi formatta saklandığını bilmeniz gerekir.
Kevin

Sayıların ikili biçimde, özellikle ikili tamsayılarda olduğu söylendi. Soruma yardımcı oluyor mu?

Hayır, bilgisayardaki her şey ikili, dosyanın düzenini bilmeniz gerekir - her sayı nerede, her sayı ne anlama geliyor. Bu dosyayı nereden aldın?
Kevin

sadece açıklığa kavuşturmak için, normal dosyam da var. [seq = 132253932] [Major = S] [Minor = D] [src = seq1] [Id = 0] [ref = 0] [Tarih = 20120307] Normal dosyadaki etiketlerden birinin değeri ascii, Normal dosya genellikle günlükleri okumak için kullanılır, ancak doğru değere sahip olduğundan emin olmak için farklı formatta bu ikili dosyaya bakıyoruz.

Bir "standart" altıgen çöplüğün sağ tarafı tipik olarak bu verilerin ASCII temsilidir. Bu metni görürseniz: not texto ASCII göre, sebebi yok bunun dosyasını okur programa ASCII olduğu anlamına gelir. Örneğin. 64 bit küçük endian işaretsiz tam sayı olarak kodlandığında 7957706749327538292 sayısı . bakışlar ASCII görünümünde böyle: not text.
Peter.O

Yanıtlar:


4

Sayıları depolamanın birçok yolu vardır - ASCII (kısmi parçayı VEYA bir bin gruplama olarak ayırmak için ',' kullanmak gibi yerel ayara özgü değişkenlere sahip olabilir), ikili tamsayı (değişken bit sayısı) / float / double (tümü) endian mimarisine ve dosyayı üreten yazılımın temsili resmileştirip biçimlendirmemesine bağlı olarak değişebilir), BCD (sıkıştırılmamış, paketlenmiş, sabit nokta ve diğer varyantlar), Bi-quinary kodlu ondalık ...

Standart yok.


19

Bilgisayar bilimi için ezberlemek zorunda olduğum ilk şeylerden biri Veri + Yorum = Yararlı Bilgiler idi . Bunun bir sonucu Veri veya Yorum eksikse hiçbir şeyiniz olmamasıdır. Verilerin kendisi size nasıl yorumlanacağını söyleyemez. (bunu size söyleyen meta verileriniz olabilir, ancak daha sonra meta verileri nasıl yorumlayacağınızı bilmeniz gerekir )

Koşullar altında şunu denemenizi öneririm:

file filename

Böyle bir şey gelirse:

filename: data

ve sahip kesinlikle biçimidir hiçbir fikri, o geliyor hangi program kullanımı ne ya içeriğiyle ilgili bir şey filename, o zaman muhtemelen vazgeçmelidir.

Sekizli Döküm Çıkışı

od(sekizlik dökümü) karma bir metin ve sekizlik dökümü üretir. Sigara numaraları, ya aşağıdaki gibi basılabilir karakterler olarak o, s, fgibi vb veya basılamayan karakterler \0(ASCII 0, NUL), ya da \a(ASCII 7, BELstandart C öneki ile baz 8) ya da numaraları, 0(örneğin 032= 26 ondalık). Dosyanız 8 bit baytlık bir akış olarak yorumlanır .

Onaltılı Döküm Çıkışı

hexdumpgeleneksel bir onaltılık döküm oluşturur, bir sütun onaltılı olarak 8 bit bayt listeler, diğeri varsa bu baytların hangi ASCII karakterlerine karşılık geldiğini gösterir (bayt değeri yazdırılamaz bir ASCII karakteri ise veya bir ASCII karakteri değilse) , .bu konumda gösterilir). Dosyanız yine 8 bit baytlık bir akış olarak yorumlanır .

tamsayılar

Dosyanız% 100 ikili tamsayı içeriyorsa (örn. Bir tür tamsayı gösteriminin başlıksız, tekdüze, tek boyutlu bir dizisiyse), tüm bu soruları kendinize cevaplamanız gerekir:

Muhtemelen ţu an ţunu unutuyorum.

Ve bu, bilgisayarın ortak, modern bir mimarisinden gelen tek boyutlu tekdüze bir tamsayı dizisi içindir. Verileriniz herhangi bir karmaşıklığa sahipse, işler o kadar tüylü olacak ki, piyangoyu kazanmak sadece formatı tahmin etmekten daha kolay olacaktır. Ve sahip sen biçimi bilmedikçe, (bir tahminde ama bir tahminim) tahmin etmek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.