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) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    发现个atan2的正确使用方式
    Forward+ Shading架构
    fatal: unable to connect to gitee.com: gitee.com[0: 180.97.125.228]: errno=Unknown error 解决方案
    HDFS HA(高可用性)集群规划
    如何使用RTP引擎对语音编码进行转码
    关于 Angular 应用 tsconfig.json 中的 target 属性
    浅谈 Orbeon form builder 的权限控制
    关于 Angular 应用 tsconfig.json 中的 lib 属性
    orbeon form 通过 url 的方式同第三方应用集成的开发明细
    orbeon form 的配置介绍
  • 原文地址:https://www.cnblogs.com/ztguang/p/12648207.html
Copyright © 2011-2022 走看看