how to access and operate a binarry file ?

来源:互联网 发布:中山大学网络缴费 编辑:程序博客网 时间:2024/06/13 10:11


In some exception case, we need to check and modified a binary file byte by byte , in a Windows-like OS, we could use some tools like UtralEdit and so on.

but in a Linux/Unix-like OS, how can we do this ?

I suggest VIM.

VIM is a smart and powerful and flexible tool , it can do too much more things than our cognition.

here I'll show you how to use Vim to read and modified a binary file.


first, open the binary file by vim :

       vim  -b  test.bin

    at this this moment,  you'll see some digital gibberish like below:

         QFI<fb>^@^@^@^C^@^@^@^@^@^@^A^H^@^@^@*^@^@^@^P^@^@^@^B@^@^@^@^@^@^@^@^@^@^@^R^@^@^@^@^@^C^@^@^@^@^@^@^@^A^@^@^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^    @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^D^@^@^@hh^C<f8>W^@^@^@<90>^@^@dirty bit^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^Acorrupt bit^@^@    ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A^@lazy refcounts^@^@^@^


...


then, type "%!xxd" in Vim's command mode, you'll see the digital gibberish been converted to hex and showed like below:

    1 0000000: 5146 49fb 0000 0003 0000 0000 0000 0108  QFI.............
    2 0000010: 0000 002a 0000 0010 0000 0002 4000 0000  ...*........@...
    3 0000020: 0000 0000 0000 0012 0000 0000 0003 0000  ................
    4 0000030: 0000 0000 0001 0000 0000 0001 0000 0000  ................
    5 0000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    6 0000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    7 0000060: 0000 0004 0000 0068 6803 f857 0000 0090  .......hh..W....
    8 0000070: 0000 6469 7274 7920 6269 7400 0000 0000  ..dirty bit.....
    9 0000080: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   10 0000090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   11 00000a0: 0001 636f 7272 7570 7420 6269 7400 0000  ..corrupt bit...
   12 00000b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   13 00000c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   14 00000d0: 0100 6c61 7a79 2072 6566 636f 756e 7473  ..lazy refcounts
   15 00000e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   16 00000f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   17 0000100: 0000 0000 0000 0000 2f72 6f6f 742f 7465  ......../root/te
   18 0000110: 7374 2f69 6d61 6765 2f69 6133 3265 5f72  st/image/ia32e_r
   19 0000120: 6865 6c37 7532 5f63 7075 3230 3036 2e69  hel7u2_cpu2006.i
   20 0000130: 6d67 0000 0000 0000 0000 0000 0000 0000  mg..............


now, you can modify the hex words in the Vim's edit mode, for example , here I will modify the red block of the above text.

after it , type "%!xxd   -r" to convert the hex type to binary type,

save this file like you always doing in Vim. Now , this binary file had been modified .


open this file again , you'll see like below:

    1 0000000: 0000 1400 0000 0000 0000 0000 0000 0000  ................
    2 0000010: 0000 002a 0000 0010 0000 0002 4000 0000  ...*........@...
    3 0000020: 0000 0000 0000 0012 0000 0000 0003 0000  ................
    4 0000030: 0000 0000 0001 0000 0000 0001 0000 0000  ................
    5 0000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    6 0000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    7 0000060: 0000 0004 0000 0068 6803 f857 0000 0090  .......hh..W....
    8 0000070: 0000 6469 7274 7920 6269 7400 0000 0000  ..dirty bit.....
    9 0000080: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   10 0000090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   11 00000a0: 0001 636f 7272 7570 7420 6269 7400 0000  ..corrupt bit...
   12 00000b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   13 00000c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   14 00000d0: 0100 6c61 7a79 2072 6566 636f 756e 7473  ..lazy refcounts
   15 00000e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   16 00000f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   17 0000100: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   18 0000110: 7374 2f69 6d61 6765 2f69 6133 3265 5f72  st/image/ia32e_r
   19 0000120: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   20 0000130: 0000 0000 0000 0000 0000 0000 0000 0000  ................

   21 0000140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
   22 0000150: 0000 0000 0000 0000 0000 0000 0000 0000  ................


see the red block , what difference you've found than before?

good job !


haha, thanks.



0 0