zoukankan      html  css  js  c++  java
  • 用VIM查看编辑二进制文件

    用VIM查看编辑二进制文件

    vim可以很方便地编辑二进制文件,个人认为它比emacs的二进制编辑方式更好用。vim中二进制文件的编辑是先通过外部程序xxd来把文件dump成其二进制的文本形式,然后就可以按通常的编辑方式对文件进行编辑,编辑完成后再用xxd 转化为原来的形式即可。

    可分如下几步进行:

    (1) 首先以二进制方式编辑这个文件: vim -b datafile

    (2) 现在用 xxd 把这个文件转换成十六进制: :%!xxd

    文本看起来像这样:

    0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ....9..;..tt.+NI
    0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30 K,.`.....b..4^.0
    0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9 7;'1.".....i.59.

    现在你可以随心所欲地阅读和编辑这些文本了。 Vim 把这些信息当作普通文本来对待。修改了十六进制部分并不导致可显示字符部分的改变,反之亦然。

    (3) 最后,用下面的命令把它转换回来: :%!xxd -r

    只有十六进制部分的修改才会被采用。右边可显示文本部分的修改忽略不计。

    xxd是linux的一个命令,vim可以通过”!”来调用外部命令,其功能就是进行十六进制的dump或者反之。

    VIM 编辑二进制文件 (vim手册载录)

    *23.4* 二进制文件

    你可以用 Vim 来编辑二进制文件。Vim 本非为此而设计的,因而有若干局限。但你能读取一个文件,改动一个字符,然后把它存盘。结果是你的文件就只有那一个字符给改了,其它的就跟原来那个一模一样。

    要保证 Vim 别把它那些聪明的窍门用错地方,启动 Vim 时加上 ”-b” 参数:

    vim -b datafile

    这个参数设定了 'binary' 选项。其作用是排除所有的意外副作用。例如,'textwidth'设为零,免得文本行给擅自排版了。并且,文件一律以 Unix 文件格式读取。

    二进制模式可以用来修改某程序的消息报文。小心别插入或删除任何字符,那会让程序运行出问题。用 “R” 命令进入替换模式。

    文件里的很多字符都是不可显示的。用 Hex 格式来显示它们的值:

    :set display=uhex

    另外,也可以用命令 “ga” 来显示光标下的字符值。当光标位于一个 <Esc> 字符上时,该命令的输出看起来就像这样:

     <^[>  27, Hex 1b,  Octal 033 

    文件中也许没那么多换行符。你可以关闭 'wrap' 选项来获得总览的效果:

            :set nowrap

    字节位置:

    要发现你在文件中的当前字节位置,请用这个命令:

    g CTRL-G

    其输出十分冗长:

        Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206 

    最后两个数字就是文件中的当前字节位置和文件字节总数。这已经考虑了 'fileformat'选项导致换行符字节不同的影响。

    要移到文件中某个指定的字节,请用 “go” 命令。例如,要移到字节 2345:

    2345go

    使用XXD:

    一个真正的二进制编辑器用两种方式来显示文本: 二进制和十六进制格式。你可以在 Vim里通过转换程序 “xxd” 来达到这效果。该程序是随 Vim 一起发布的。

    首先以二进制方式编辑这个文件:

     vim -b datafile

    现在用 xxd 把这个文件转换成十六进制:

            :%!xxd

    文本看起来像这样:

            0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49  ....9..;..tt.+NI 
            0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30  K,.`.....b..4^.0 
            0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9  7;'1.".....i.59. 

    现在你可以随心所欲地阅读和编辑这些文本了。 Vim 把这些信息当作普通文本来对待。修改了十六进制部分并不导致可显示字符部分的改变,反之亦然。

    最后,用下面的命令把它转换回来:

    :%!xxd -r

    只有十六进制部分的修改才会被采用。右边可显示文本部分的修改忽略不计。

  • 相关阅读:
    基于php缓存的详解
    Nginx 的 Location 配置指令块
    Nginx负载均衡与反向代理的配置实例
    Linux下mysql定时备份及恢复
    KVO的底层实现
    小谈KVC中KeyPath的集合运算符
    iOS开发中常用的单例
    内存中的5大区域
    需要记住的几个ASCII码
    结构体-内存对齐
  • 原文地址:https://www.cnblogs.com/zxc2man/p/4303470.html
Copyright © 2011-2022 走看看