zoukankan      html  css  js  c++  java
  • vim+xxd=强大的十六进制编辑器

    http://hi.baidu.com/hilojack/item/9cf0c307f7c03a133b53ee7a

    vim是黑客文化中强大的编辑器。利用它调用外部十六进制文件显示命令xxd就可以顺利的编辑二进制文件了。
    其中,%在vimComandLine时代表当前文件的路径,xxd是以十六进制显示一个文件,xxd -r>是将十六进制还原为二进制。
    下面举一个例子,备份我们的MBR。
    sudo dd if=/dev/sda of=~/mbr.backup bs=512 count=1
    题外话:其中含有分区表,这时我们可以利用这个命令恢复我们的MBr:
    sudo dd if=~/mbr.backup of=/dev/sda bs=512 count=1
    sudo dd if=~/mbr.backup of=/dev/sda bs=1 count=66 seek=446(恢复分区表)
    好了,这个就是我们的MBR文件,是二进制的。

    首先以二进制的方式打开它:
    vim mbr.backup -b
    再在vim 命令模式下输入:
    :%!xxd            #参数%指当前所编辑的文件 
    此时MBR文件会以十六进制显示,现在就可以编辑它了。。

    ========================================================

    0000090: be88 7de8 1c01 be05 7cf6 c280 7448 b441  ..}.....|...tH.A

    00000a0: bbaa 55cd 135a 5272 3d81 fb55 aa75 3783  ..U..ZRr=..U.u7.

    00000b0: e101 7432 31c0 8944 0440 8844 ff89 4402  ..t21..D.@.D..D.

    00000c0: c704 1000 668b 1e5c 7c66 895c 0866 8b1e  ....f..|f..f..

    00000d0: 607c 6689 5c0c c744 0600 70b4 42cd 1372  `|f...D..p.B..r

    00000e0: 05bb 0070 eb76 b408 cd13 730d f6c2 800f  ...p.v....s.....

    00000f0: 84d0 00be 937d e982 0066 0fb6 c688 64ff  .....}...f....d.

    0000100: 4066 8944 040f b6d1 c1e2 0288 e888 f440  @f.D...........@

    0000110: 8944 080f b6c2 c0e8 0266 8904 66a1 607c  .D.......f..f.`|

    0000120: 6609 c075 4e66 a15c 7c66 31d2 66f7 3488  f..uNf.|f1.f.4.

    0000130: d131 d266 f774 043b 4408 7d37 fec1 88c5  .1.f.t.;D.}7....

    0000140: 30c0 c1e8 0208 c188 d05a 88c6 bb00 708e  0........Z....p.

    0000150: c331 dbb8 0102 cd13 721e 8cc3 601e b900  .1......r...`...

    0000160: 018e db31 f6bf 0080 8ec6 fcf3 a51f 61ff  ...1..........a.

    0000170: 265a 7cbe 8e7d eb03 be9d 7de8 3400 bea2  &Z|..}....}.4...

    0000180: 7de8 2e00 cd18 ebfe 4752 5542 2000 4765  }.......GRUB .Ge

    0000190: 6f6d 0048 6172 6420 4469 736b 0052 6561  om.Hard Disk.Rea

    00001a0: 6400 2045 7272 6f72 0d0a 00bb 0100 b40e  d. Error........

    00001b0: cd10 ac3c 0075 f4c3 e3b9 76fb 0000 8001  ...<.u....v.....

    00001c0: 0100 07fe ffff 3f00 0000 499d d801 00fe  ......?...I.....

    00001d0: ffff 0ffe ffff c59d d801 eb4c 6a23 0000  ...........Lj#..

    00001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................

    00001f0: 0000 0000 0000 0000 0000 0000 0000 55aa  ..............U.


    ================================================================
    编辑完了以后,我们需要还原为二进制文件:
    :%!xxd -r                                    #参数-r是指将当前的十六进制转换为二进制


    好了,保存退出:
    :wq

    ==========================================

    VIM显示十六进制出错 出处:http://www.cnblogs.com/lidp/archive/2009/06/26/1697873.html

     在linux下用vim打开jpg文件,使用%!xxd进行16进制显示时,文件头显示为"3f3f 
    3f3f 0011 0804"文件尾端显示为 "3f3f 
    0a";而同样的操作在windows下,就显示为"ffd8 ffc0 0011 0804"和 "ffd9 
    0a",这才是正确的jpeg文件头和文件尾标志。
    很蹊跷 !
    初时,我以为是jpeg在windows和linux下是不同的文件头,后来把jpg后缀去掉,就一个纯文件,现象依旧。考虑可能不是操作系统的差异了。
    重新使用ghex打开jpeg数据查看,发现显示正常,为"ffd8 ffc0 0011 
    0804"和 "ffd9 0a",正确。
    估计应该是vim的问题了。
    3f的ascii码是?,那表示vim对文件头、尾没有正常解析,是不是和vim解析文件时用的编码格式有关系呢?
    打开.vimrc配置项,屏蔽掉下面这句话:
    set fileencodings=utf-8,gb2312,gbk,gb18030,ucs-bom
    再用vim打开jpeg文件,显示"ffd8 ffc0 0011 0804"和 "ffd9 0a", 
    显示正确。
    原来,为了支持识别和显示中文,我规定了vim的fileencodings, 
    当vim打开文件时,会使用规定的编码格式对数据进行解析,可惜jpeg的文件头FFD8、尾FFD9 
    不是任何一个中文的编码,vim找不到对应的中文字,就显示为??,即:3f3f。
    至此,困惑全部打开。
     
    <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
    阅读(4340) | 评论(0) | 转发(7) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    [转载]从零开始学习OpenGL ES之一 – 基本概念
    ios中陀螺仪CoreMotion的使用
    如何在IOS中使用3D UI – CALayer的透视投影
    cocos3d加载3Dmax模型到ios中
    cocos2d 坐标系统参考
    PAT 1029 Median
    PAT 1028 List Sorting
    Linux中的进程调度(二)
    LaTeX学习(一)
    搬家
  • 原文地址:https://www.cnblogs.com/ztguang/p/12648207.html
Copyright © 2011-2022 走看看