
開発者: Austin Peavy - https://github.com/aus10pv
NCC Group Plc によりオープンソースとして公開 - https://www.nccgroup.com/
Apache 2.0 ライセンスの下で公開されています(詳細は LICENSE を参照)

Cartographer は Ghidra 用のコードカバレッジマッピングプラグインであり、ソースコードを必要とせずにプログラムのどの部分が実行されたかを研究者が確認できるようにします。
Cartographer の最新安定版は Releases ページからダウンロードできます。
File -> Install Extensions...プラグインを読み込むと、CodeBrowser ウィンドウにコードカバレッジデータを操作するための追加コントロールが表示されます。
コードカバレッジファイルは、[Tools] メニューから読み込めます: Tools -> Code Coverage -> Load Code Coverage File(s)...
コードカバレッジファイルを読み込むと、すべてのカバレッジデータが Listing ビューと Decompiler ビューですぐにハイライト表示されます。

各関数のカバレッジデータに関する詳細情報は、Code Coverage ウィンドウで確認できます。
Code Coverage ウィンドウは、Window -> Code Coverage に移動するか、Windows では Ctrl-Shift-C(Mac では Cmd-Shift-C)を押すことで開けます。
このウィンドウには、プログラム内の各関数に関するさまざまな詳細が表示されます:
いずれかの関数をクリックすると、Listing ビューと Decompiler ビューでその関数に移動します。

Filter 入力ボックスを使用すると、関数を名前で検索できます。
カバレッジテーブルに表示される任意のデータを列フィルタとして使用できます。

Code Coverage ウィンドウの右下にあるドロップダウンを使用すると、読み込んだコードカバレッジファイルをすばやく簡単に切り替えられます。

Code Coverage ウィンドウの下部にあるテキストボックスを使用すると、読み込んだコードカバレッジファイルに対して論理演算を実行できます。
これは、プログラムの異なる実行間の差分や類似点を調べるのに非常に役立ちます。

式パーサー内で使用できる論理演算子は以下のとおりです。
&: 両方のカバレッジで実行されたコードのみを取得します|: いずれかのカバレッジで実行されたコードを取得します^: カバレッジ間で異なる実行コードのみを取得します-: 左側のカバレッジにのみ存在する実行コードを取得しますカバレッジは、ドロップダウンメニューのアルファベット ID(A、B、XY など)で参照されます。
各論理演算は括弧でグループ化され、式は任意の長さや複雑さにできます。
カバレッジ A と B の両方で実行されたコードを表示:
A & B
カバレッジ A と B の間で異なる実行コードを表示:
A ^ B
B でのみ実行されたコードを表示:
B - A
A と B にあるすべてのカバレッジデータを結合し、C との差分を検出:
(A | B) ^ C
Gradle を使用して、Cartographer をソースコードからビルドできます。
Cartographer の GitHub リポジトリをクローンします。
$ git clone https://github.com/nccgroup/Cartographer.git
リポジトリに移動して gradle でビルドします。
$ cd Cartographer
$ gradle -PGHIDRA_INSTALL_DIR=<ghidra_install_dir>
<ghidra_install_dir> をローカルの Ghidra インストールパスに置き換えます。ビルド後、プラグインの ZIP ファイルは dist/ フォルダにあります。
Cartographer でバグを見つけた場合は、GitHub から issue を開いてください。
元々は Lighthouse に触発されました - https://github.com/gaasedelen/lighthouse