2.4. エディタ

2.4.1. Xyzzy
2.4.2. Stirling

エディタとは通常はテキストに対するそれを指す。 バイナリエディタの話題をする場合には、「バイナリ」を省略せずに記す。

記者の場合、巨大な逆アセンブリコードを、バンク単位ごとにテキストファイルとして保存しておくのが、 逆解析作業の最初の一歩となる。 例えば、戦闘ロジックを調べたいとしよう。 このとき、まずは戦闘ロジックのサブルーチンを含むバンクの逆アセンブリコードファイルをテキストエディタで開く。 同時に、戦闘にも関係するようなゲーム全般から参照されるサブルーチンのあるバンク、 さらに汎用的な目的で利用されるライブラリ的なサブルーチンを含むバンクの各コードファイルも開いている必要がある。 そういうふうにしてサブルーチンの呼び出し関係を追っていかないと、制御の構造がつかめない。 要するに、複数のファイルを同時に開くことができて、かつ頻繁にそれらの間を行ったり来たりする機能があるエディタでないと、 解析作業に支障をきたす(記者個人的には)。

逆解析作業に相応しいエディタに要求する機能を列挙する。これらは要件だと考えてもいい。 これらを大体満足するエディタをまず見つけ、確保してから、 逆アセンブリコード解析作業を始めるのが望ましい。 自分の好みに合ったエディタを求めて、インターネットを何ヶ月でもさまよう覚悟が欲しい。 それほどエディタ選択は重要だ。

バイナリエディタに関しては、それほど高機能な要件を課さない。 というのも、バイナリエディタを用いて行う作業がそれほど多くはないからだ。 以下のもので十分だろう。

複数回 Undo/Redo 機能

ロムイメージを不用意に変更した場合、オリジナルの状態にまで復元できることが大前提となる。 もっと言うと、復元時点でそのことが視覚的に確認できるとよい。

検索機能

開いたファイルの中からバイト列パターンを指定して検索し、 それが見つかればそのアドレスへジャンプするような機能と、 grep のように、特定のフォルダから同様に検索し、 ファイル名と検出したアドレスのすべてを一覧表示する機能が要る。 ここでは後者の機能を BGREP と呼ぶことにする。

軽さ

例えば CD-ROM に収めてある巨大なデータファイルを開いても、 スクロールバーが滑らかに動くことを強く勧める。 そうでなければ、作業にならない。

2.4.1. Xyzzy

図 2.7 Xyzzy

Xyzzy

あえて一言で表現すれば、Windows 環境で起動するテキストエディタである。 本説を執筆した当時は作者の Web サイト やる気のない謎のぺぇじ で入手可能であったが、現在は xyzzy-022.github.io で入手するのがよい。

2.4.2. Stirling

Stirling はフリーのバイナリエディタである。README には http://www2c.airnet.ne.jp/dds2 から入手可能とあるようだが、 記者は Vector あたりから入手した記憶がある。 このバイナリエディタの特徴は色々あるが、 個人的には複数回 Undo/Redo 機能が完璧に実装されているのがうれしかった。

記者は逆アセンブルを知らない時代に、ロムイメージファイル内のデータとおぼしき部位を改造し、 エミュレータで動作の変更を見るといった、偶発的な解析を行うのに用いていた。 当然現在ではそのような利用はしていない。BGREP の機能を主に活用している。 例えば、特定のサブルーチンを呼び出す箇所をすべて特定することができる。

[注記] 注記

現在では上で紹介したもの以外にも高機能な無料のバイナリーエディターが存在すると思われる。 Google で hex editor のような単語を組み合わせて検索すれば、比較的容易に優良なツールを発見できるのではないだろうか。

実はバイナリーエディターはコード解析の観点からはそれほど重要なツールではない。 コマンドラインで odhexdump を利用して ROM イメージを十六進ダンプすることで間に合うことが多い。 BGREP は少々コーディングの手間を要するが、Python の正規表現パターンを bytes オブジェクトで構築することで実現可能だ。 とりわけスーパーファミコンの ROM を作業する上では各種アドレス変換が面倒なことから、 逆アセンブラーを自作する過程で自ずと出来上がる機能を流用して、ダンプツールや BGREP を実装するのが当然の手段になる。