2013-08-22 44 views
0

我想直接編輯一個二進制文件,我知道兩個編輯器,六和hexedit。但是當我單獨使用它們打開二進制文件時,結果是不同的。以下是我所做的。首先我使用「dd if =/dev/sda of = mbr bs = 512 count = 1」來生成二進制文件,其中包含mbr數據。使用vi和hexedit打開一個二進制文件,爲什麼不同?

000001E0 FF FF 83 FE FF FF 00 40 D6 02 00 38 2B 01 00 00 
000001F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA 

我用 「六MBR」 打開它,類型,然後我打開它使用 「hexedit的MBR」,並顯示如下: 開始:

00000000 EB 63 90 D0 BC 00 7C 8E C0 8E D8 BE 00 7C BF 00 
00000010 06 B9 00 02 FC F3 A4 50 68 1C 06 CB FB B9 04 00 
00000020 BD BE 07 80 7E 00 00 7C 0B 0F 85 0E 01 83 C5 10 

結局 「:%!XXD」 ,它會顯示這樣的: 開始:

0000000: c3ab 63c2 90c3 90c2 bc00 7cc2 8ec3 80c2 
0000010: 8ec3 98c2 be00 7cc2 bf00 06c2 b900 02c3 
0000020: bcc3 b3c2 a450 681c 06c3 8bc3 bbc2 b904 

結束:

00002b0: bfc3 bf00 40c3 9602 0038 2b01 0000 0000 
00002c0: 0000 0000 0000 0000 0000 0000 55c2 aa0a 

hexedit顯示是我期待在MBR中。但是用vi顯示怎麼說?此外,vi顯示看起來是錯誤的,因爲有超過512個字節。

謝謝你的任何解釋!

回答

6

命令:%!xxd使用外部程序xxd,所以你應該首先嚐試通過鍵入來檢查其輸出:

xxd mbr 

如果它看起來不錯,嘗試以二進制模式(無EOL)打開VI:

vi -b mrb 

然後:%!xxd

+0

非常酷!我試過你的方法,一切都很好。謝謝! – Akr

+0

如果回答符合您的需求,請標記爲已回答。謝謝。 – JScoobyCed

1

你在「六」看到的字節似乎是準確的二進制代碼的UTF-8表示。

也許「vi」會在將數據傳遞給「xxd」之前,將讀取的數據從二進制文件轉換爲UTF-8。

相關問題