Vimでバイナリ編集が出来るプラグインvinarise

Vimでバイナリ編集をする際にはxxdコマンドを使ってバイナリ表示をさせることになると思いますが、それは単体ではとても使いにくいもので、決して常用出来るものではないと思います。
しかし、現在のVimには直接バイナリが編集出来るプラグイン、vinariseがあります。

github : vinarise

vinariseは現在最低限のバイナリ編集機能しかありませんが、xxdコマンドを使うよりも非常に使い勝手が良いです。
今回最先端のVim上で使用出来るバイナリエディタとしてvinariseを紹介したいと思います。

使用時の最低要件

vinariseを使用するには、vinariseのプラグイン自体は当然必要ですが、Pythonインタフェースが必要になります。
Pythonインタフェースについては以下を参考にしてください。

Hack #132: Pythonインタフェースを使う(1)

あとはvinariseをgithubなりからダウンロードして、配置すれば使用準備はOKです。

最低限の使い方

開きたいバイナリファイルを準備しておき、あとは以下のコマンドを実行します。


:Vinarise binary.bin

これでバイナリファイルを開くことが出来ます。

基本操作方法

基本的にVimの操作方法がそのまま使用出来ます。
バイナリ値をいじりたい場合は、指定アドレスの値上で"r"を入力します。
現在の値がVimコマンドライン上に表示されるので、変更したい値を入力するとバイナリ値を編集出来ます。

その他のキーについては以下の表を参考に。

キーマップ 機能
V Vimでバイナリファイルを開き直す
q 開いているバイナリファイルを隠す
Q 開いているバイナリファイルを閉じる
l 次の列へ移動
h 次の列へ移動
j 次の行へ移動
k 前の行へ移動
gh 行頭アドレスへ移動
0 行頭アドレスへ移動
^ 行頭アドレスへ移動
gl 行末アドレスへ移動
$ 行末アドレスへ移動
C-f 一画面先へ移動
C-b 一画面前へ移動
C-d 半画面先へ移動
C-u 半画面前へ移動
C-g 現在位置アドレスの値を表示
r 現在位置アドレスの値を変更
G 入力したアドレス位置へ移動
go 現在位置アドレスからのオフセットアドレスへ移動
gg 先頭アドレスへ移動
gG 末尾アドレスへ移動
/ バイナリ値を検索
? バイナリ値を逆向き検索
g/ 文字列として検索
g? 文字列として逆向き検索
e/ Python正規表現検索
n 最後の検索パターンを実行
N 最後の検索パターンを逆向き実行

またvimfilerを使用している場合は、vimfilerで選択しているファイルを"B"と押すことでvinariseを使ってバイナリファイルを開く事が出来ます。

objdump表示機能

objdumpコマンドが使用出来る場合はオブジェクトファイル情報を表示することが出来ます。


:VinariseDump object.obj

vinariseが非常にみやすい形式に変換してくれるので、逆アセンブルやファイル情報解析にとても役立ちます。
まさしくバイナリアン向けな特徴的機能と言えるでしょう。

バイナリアンのためのバイナリエディタvinarise

vinariseはまだまだ発展途上でこれからといった感じのプラグインですが、基本的なバイナリ解析や、編集機能はあるので十分実用出来ます。
作者のShougoさんも現在精力的に開発中ですので、どんどん意見をフィードバックさせていきましょう!

2012/02/22追記

vinariseに新しいキーマップが追加されたので追記