viでバイナリファイルを編集するには

手元に適当なバイナリエディタが無い時のためのメモ。

まずファイルをバイナリモードで開く。

vi -b sample.png (あるいはvim -b sample.png)

こんな感じで表示されます。

<89>PNG^M
^Z
^@^@^@^MIHDR^@^@^C.^@^@^B<d6>^H^@^@^@^@/gP<^@^@^@^AsRGB^@<ae><ce>^\<e9>^@^@^@^DgAMA^@^@<b1><8f>^K<fc>a^E^@^@^@ pHYs^@^@^N<c3>^@^@^N<c3>^A<c7>o<a8>d^@^@B<99>IDATx^<ed><dd>A<92><e3>:<d2>&<da>Z<c8>^[<be>U<dc>^E<e5>zr?x<a3><dc>K?<f6><a8><cdd
><da><de>^R<aa>#<a4><cf># <88><94><a8>^H<8a><a4><c8>s<cc><cd><fe><9b>^N^P^@E^Bt<cb>[^?<d5>^?<fe>^K^@<c0>F<94>b^@^@<9b>Q<8a>^A^@lF)^F^@<b0>^Y<a5>^X^@<c0>f<94>b^@^@<9b>Q<8a>^A^@lF)^F^@<b0>^Y<a5>^X^@<c0>f<94>b^@^@<9b>Q<8a>^A^@lF)^F^@<b0>^Y<a5>^X^@<c0>f<94>b^@^@<9b>Q<8a>^A^@lF)^F^@<b0>^Y<a5>^X^@<c0>f<94>b^@^@<9b>Q<8a>^A^@lF)^F^@<b0>^Y<a5>^X^@<c0>f<94>b^@^@<9b>Q<8a>^A^@lF)^F^@<b0>^Y<a5>^X^@<c0>f<94>b^@^@<9b>Q<8a>^A^@lF)^F^@<b0>^Y<a5>^X^@<c0>f<94>b^@^@<9b>Q<8a>^A^@lF)^F^@<b0>^Y<a5>^X^@<c0>f<94>b^@^@<9b>Q<8a>^A^@lF)^F^@<b0>^Y<a5>^X^@<c0>f<94>b^@^@<9b>Q<8a>^A^

次にxxdコマンドを適用。

:%!xxd

こんな感じで16進数で表示され、編集できるようになります。

0000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR
0000010: 0000 032e 0000 02d6 0800 0000 002f 6750 ............./gP
0000020: 3c00 0000 0173 5247 4200 aece 1ce9 0000 <....sRGB.......
0000030: 0004 6741 4d41 0000 b18f 0bfc 6105 0000 ..gAMA......a...
0000040: 0009 7048 5973 0000 0ec3 0000 0ec3 01c7 ..pHYs..........
0000050: 6fa8 6400 0042 9949 4441 5478 5eed dd41 o.d..B.IDATx^..A

編集が完了したら、下記で16進数表示からバイナリ表示に戻します。

:%!xxd -r

rオプションは16進数表示からバイナリ表示に変更するオプションになります。
最後に保存。

:wq

以上

Leave a Reply

Your email address will not be published. Required fields are marked *