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



