Mayhem CLI からのカバレッジの実行とダウンロード¶
カバレッジ ファイルは、ターゲットのラン ページの UI からだけではなく、Mayhem CLI から直接実行してダウンロードすることもできます。
--coverage
パラメーター (またはカバレッジ解析を含むすべてのタスクを実行する --all
パラメーター) 付きで mayhem run
が実行された場合、ランの完了時に mayhem sync
または mayhem download
コマンドを使用して関連するターゲット カバレッジ ファイルをダウンロードできます。
カバレッジ解析付き Mayhem ランの実行¶
このプロセスを順を追ってより詳しく見てみましょう。このサンプルでは、2.10 チュートリアル Docker イメージを使用します。
docker pull forallsecure/tutorial:2.10
docker run -ti --privileged --rm forallsecure/tutorial:2.10
まず、testme
ターゲット フォルダーに移動します。
次に、testme
の依存関係をパッケージ化してから mayhem run
コマンドを実行します。
Tip
mayhem login
を実行して Mayhem サーバーにログインする必要がある場合があります。
# Package testme-v1 library dependencies.
mayhem package ./testme -o /tmp/testme-pkg
testme
ターゲットをパッケージ化したら、--coverage
または --all
パラメーターを指定して mayhem run
コマンドを実行します。ここでは、--all
パラメーターを使用して、すべての Mayhem ラン タスクを実行しました。
mayhem run --all /tmp/testme-pkg
この時点で、作業の流れは次のようになっているはずです。
Sancov/Gcov のサポート¶
Mayhem は、ターゲット実行時に sancov/gcov ツールを使用して、sancov/gcov 互換バイナリのカバレッジを生成できます。
gcov の場合、コンパイラによって生成された .gcno
ファイルをターゲット バイナリと同じディレクトリに置く必要があります。
sancov/gcov バイナリのレイアウトおよびコンパイル方法の詳細については、チュートリアル イメージの sancov
および gcov
ディレクトリを参照してください。
上記の testme
ターゲットと同じ手順で sancov/gcov バイナリ ターゲットの mayhem run
を実行できます。
mayhem sync
によるカバレッジ ファイルのダウンロード¶
次に、testme
ターゲットがパッケージされた /tmp/testme-pkg
に移動すると、ディレクトリには次の 3 つのアイテムだけがあることがわかります。
- Mayhemfile:
mayhem run
コマンド用の構成ファイルです。 - tests: 生成されたテスト ケースです。
- root: パッケージ化されたアプリケーションがある場所です。
ただし、mayhem sync
コマンドを実行すると、Mayhem CLI は testme
ターゲットに関連するカバレッジ ファイルをダウンロードします。
Important
カバレッジ ファイルをダウンロードするには、少なくとも 1 つのランが完了している必要があります。
mayhem sync /tmp/testme-pkg
testme_coverage
という新しいフォルダーがダウンロードされ、中に 3 つのファイルがあります。
- block_coverage.drcov: Binary Ninja (bncov)、IDA Pro (Lighthouse)、Ghidra (Dragon Dance) などのアプリケーションで、テスト スイートによってカバーされた基本ブロックを (マシン コード レベルで) 視覚化するのに使用できます。
- func_coverage.json: 関数カバレッジ情報を含む解析が容易な JSON ファイルです。
- line_coverage.lcov テスト スイートによってカバーされたソース コード 行を表す lcov ファイルです。
ターゲットが sancov 互換である場合、カバレッジ フォルダーにはその他のファイルもあります。
1. coverage_points.sancov: ターゲット バイナリによってレポートされたカバレッジ ポイントが sancov
フォーマットで含まれています。
2. symbolic_coverage.symcov: カバレッジ ポイントおよび場所の情報を含む解析が容易な JSON ファイルです。sancov -symbolize <sancov_files> <binary>
を実行した場合と同じです。カバレッジ レポート サーバーなどのツールで、ブラウザーでターゲットのカバレッジを閲覧するのに使用できます。
mayhem sync
を使用してカバレッジ ファイルをダウンロードする作業の流れは次のようになります。
mayhem download
によるカバレッジ ファイルのダウンロード¶
mayhem download
コマンドは mayhem sync
によく似ており、どのような場合でも、2 つのうちどちらを使用してカバレッジ ファイルをダウンロードしてもかまいません。
ただし、mayhem download
は、ターゲット パッケージおよび関連するカバレッジ ファイルの保存先フォルダーを指定する任意パラメーターを使用できる点が異なります。どのように動作するか見てみましょう。
mayhem download testme/testme -o testme_mayhem_download
mayhem download
コマンドには、<project>/<target>
という形式でターゲット ランを指定する引数が必須です。また、-o
パラメーターを使用してカバレッジ ファイルをダウンロードする場所を指定します。
mayhem download
を使用してカバレッジ ファイルをダウンロードする作業の流れは次のようになります。
まとめ¶
Mayhem CLI には、mayhem sync
または mayhem download
コマンドを使用してカバレッジ ファイルをダウンロードする機能があります。
この機能は、スクリプトで操作を自動化し、Mayhem ランが完了したらただちにカバレッジ ファイルをダウンロードしたい場合は特に役に立ちます。たとえば、一連の処理の流れ (testme
ファイル用の run.sh
など) は次のようになるでしょう。
#!/bin/sh
# Package testme-v1 library dependencies.
mayhem package ./testme -o /tmp/testme-pkg
# Run mayhem. The run ID is saved to $id
id=$(mayhem run --all /tmp/testme-pkg)
# Wait for the run to finish
mayhem wait $id
# Sync the test suite to the "testsuite" directory.
mayhem sync /tmp/testme-pkg