2013-08-22 83 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。

相关问题