vim編輯二進位制檔案

2021-05-10 09:55:06 字數 3859 閱讀 7763

對於二進位制檔案的編輯,windows下有一款很優秀的軟體winhex,會讓你的生活非常簡單。但是到了linux 下面似乎沒有專門的二進位制編輯器,但是大家不要忘了vim

雖然vim並不是針對二進位制編輯而設計,但是通過技巧也可讓vim成為很好用的二進位制編輯器。

現在假設我要把磁碟/dev/sda上1第乙個扇區(也就是mbr和硬碟分割槽表所在的位置)dump出來並進行檢視和編輯。

view code bash

123

45

#用dd先把硬碟前512byte的資料dump出來

$ sudo

ddif

=/dev/

sda of

=sda.mbr bs

=512

count

=1# 用帶-b引數的vim開啟它,-b告訴vim開啟的是二進位制檔案,

# vim就不會自作聰明地做一些額外的處理,比如自動換行等等

$ vim

-b sda.mbr

進入vim剛開是顯示的是亂碼,不用著急。在vim下輸入 :%!xxd,馬上就會顯示如下:

0000000: eb48 90d0 bc00 7c8e c08e d8be 007c bf00 .h....|......|..

0000010: 06b9 0002 fcf3 a450 681c 06cb fbb9 0400 .......ph.......

0000020: bdbe 0780 7e00 007c 0b0f 8510 0183 c510 ....~..|........

0000030: e2f1 cd18 8856 0055 c646 1105 c646 0302 .....v.u.f...f..

0000040: ff00 0020 0100 0000 0002 fa90 90f6 c280 ... ............

0000050: 7502 b280 ea59 7c00 0031 c08e d88e d0bc u....y|..1......

0000060: 0020 fba0 407c 3cff 7402 88c2 52be 7f7d . ..@|<.t...r..}

0000070: e834 01f6 c280 7454 b441 bbaa 55cd 135a .4....tt.a..u..z

0000080: 5272 4981 fb55 aa75 43a0 417c 84c0 7505 rri..u.uc.a|..u.

0000090: 83e1 0174 3766 8b4c 10be 057c c644 ff01 ...t7f.l...|.d..

00000a0: 668b 1e44 7cc7 0410 00c7 4402 0100 6689 f..d|.....d...f.

00000b0: 5c08 c744 0600 7066 31c0 8944 0466 8944 /..d..pf1..d.f.d

00000c0: 0cb4 42cd 1372 05bb 0070 eb7d b408 cd13 ..b..r...p.}....

00000d0: 730a f6c2 800f 84ea 00e9 8d00 be05 7cc6 s.............|.

00000e0: 44ff 0066 31c0 88f0 4066 8944 0431 d288 [email protected]..

00000f0: cac1 e202 88e8 88f4 4089 4408 31c0 88d0 [email protected]...

0000100: c0e8 0266 8904 66a1 447c 6631 d266 f734 ...f..f.d|f1.f.4

0000110: 8854 0a66 31d2 66f7 7404 8854 0b89 440c .t.f1.f.t..t..d.

0000120: 3b44 087d 3c8a 540d c0e2 068a 4c0a fec1 ;d.}<.t.....l...

0000130: 08d1 8a6c 0c5a 8a74 0bbb 0070 8ec3 31db ...l.z.t...p..1.

0000140: b801 02cd 1372 2a8c c38e 0648 7c60 1eb9 .....r*....h|`..

0000150: 0001 8edb 31f6 31ff fcf3 a51f 61ff 2642 ....1.1.....a.&b

0000160: 7cbe 857d e840 00eb 0ebe 8a7d e838 00eb |..}.@.....}.8..

0000170: 06be 947d e830 00be 997d e82a 00eb fe47 ...}.0...}.*...g

0000180: 5255 4220 0047 656f 6d00 4861 7264 2044 rub .geom.hard d

0000190: 6973 6b00 5265 6164 0020 4572 726f 7200 isk.read. error.

00001a0: bb01 00b4 0ecd 10ac 3c00 75f4 c300 0000 ........<.u.....

00001b0: 0000 0000 0000 0000 3b8f 3a37 0000 8001 ........;.:7....

00001c0: 0100 83fe 3f3d 3f00 0000 7f32 0f00 0000 ....?=?....2....

00001d0: 013e 83fe ffff be32 0f00 79e7 9b03 00fe .>.....2..y.....

00001e0: ffff 83fe ffff 371a ab03 5d62 2719 00fe ......7...]b'...

00001f0: ffff 82fe ffff 947c d21c edc8 4900 55aa .......|....i.u.

這樣就成為了乙個常見的二進位制編輯器的樣子了吧。左邊是二進位制顯示的資料,右邊是把二進位制轉化為字元的形式,對於無法轉化的字元就表示為點號。

注意如果你要修改二進位制檔案的話,一定要編輯左邊的hex, 改寫右邊的文字沒用,這個和ultraedit有所不同。

編輯好了再「:%!xxd -r」轉換回文字模式」:wq」存檔退出。 如果你沒有-r就儲存,vim就會用螢幕上的hex+text格式儲存的,切記要-r回來再儲存。

最後讓我們再總結一些vim編輯二進位制檔案的方法:

1. 用vim -b 開啟檔案

2. 使用:%!xxd命令

3. 編輯檔案(只編輯右邊字元不會儲存)後使用:%xxd -r

4. :wq儲存並退出檔案

對於一些.o或者.exe的檔案,大家也可以在.vimrc中加入下面**,vim自動用二進位制方式顯示檔案,並且編輯後也可以直接:wq,vim會自動執行:%xxd -r再儲存退出。

view code vi

123

4567

8910

augroup binary

au!au bufreadpre *.o,*.exe let &bin=1

au bufreadpost *.o,*.exe if &bin | %!xxd

au bufreadpost *.o,*.exe set ft=xxd | endif

au bufwritepre *.o,*.exe if &bin | %!xxd -r

au bufwritepre *.o,*.exe endif

au bufwritepost *.o,*.exe if &bin | %!xxd

au bufwritepost *.o,*.exe set nomod | endif

augroup end

VIM編輯二進位制檔案

對於二進位制檔案的編輯,windows下有一款很優秀的軟體winhex,會讓你的生活非常簡單。但是到了linux 下面似乎沒有專門的二進位制編輯器,但是大家不要忘了vim 雖然vim並不是針對二進位制編輯而設計,但是通過技巧也可讓vim成為很好用的二進位制編輯器。現在假設我要把磁碟 dev sda上...

vim編輯二進位制檔案

vim可以很方便地編輯二進位制檔案,個人認為它比emacs的二進位制編輯方式更 好用。vim中二進位制檔案的編輯是先通過外部程式xxd來把檔案dump成其二進位制的 文字形式,然後就可以按通常的編輯方式對檔案進行編輯,編輯完成後再用xxd 轉化為原來的形式即可。可分如下幾步進行 首先,以二進位制方式...

vim編輯二進位制檔案

vim可以很方便地編輯二進位制檔案,個人認為它比emacs的二進位制編輯方式更 好用。vim中二進位制檔案的編輯是先通過外部程式xxd來把檔案dump成其二進位制的 文字形式,然後就可以按通常的編輯方式對檔案進行編輯,編輯完成後再用xxd 轉化為原來的形式即可。可分如下幾步進行 首先,以二進位制方式...