コンテンツにスキップ

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 ターゲット フォルダーに移動します。

cd-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

この時点で、作業の流れは次のようになっているはずです。

run-testme

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 つのアイテムだけがあることがわかります。

  1. Mayhemfile: mayhem run コマンド用の構成ファイルです。
  2. tests: 生成されたテスト ケースです。
  3. root: パッケージ化されたアプリケーションがある場所です。

ただし、mayhem sync コマンドを実行すると、Mayhem CLI は testme ターゲットに関連するカバレッジ ファイルをダウンロードします。

Important

カバレッジ ファイルをダウンロードするには、少なくとも 1 つのランが完了している必要があります。

mayhem sync /tmp/testme-pkg

testme_coverage という新しいフォルダーがダウンロードされ、中に 3 つのファイルがあります。

  1. block_coverage.drcov: Binary Ninja (bncov)、IDA Pro (Lighthouse)、Ghidra (Dragon Dance) などのアプリケーションで、テスト スイートによってカバーされた基本ブロックを (マシン コード レベルで) 視覚化するのに使用できます。
  2. func_coverage.json: 関数カバレッジ情報を含む解析が容易な JSON ファイルです。
  3. line_coverage.lcov テスト スイートによってカバーされたソース コード 行を表す lcov ファイルです。

ターゲットが sancov 互換である場合、カバレッジ フォルダーにはその他のファイルもあります。 1. coverage_points.sancov: ターゲット バイナリによってレポートされたカバレッジ ポイントが sancov フォーマットで含まれています。 2. symbolic_coverage.symcov: カバレッジ ポイントおよび場所の情報を含む解析が容易な JSON ファイルです。sancov -symbolize <sancov_files> <binary> を実行した場合と同じです。カバレッジ レポート サーバーなどのツールで、ブラウザーでターゲットのカバレッジを閲覧するのに使用できます。

mayhem sync を使用してカバレッジ ファイルをダウンロードする作業の流れは次のようになります。

sync-testme

mayhem download によるカバレッジ ファイルのダウンロード

mayhem download コマンドは mayhem sync によく似ており、どのような場合でも、2 つのうちどちらを使用してカバレッジ ファイルをダウンロードしてもかまいません。

ただし、mayhem download は、ターゲット パッケージおよび関連するカバレッジ ファイルの保存先フォルダーを指定する任意パラメーターを使用できる点が異なります。どのように動作するか見てみましょう。

mayhem download testme/testme -o testme_mayhem_download

mayhem download コマンドには、<project>/<target> という形式でターゲット ランを指定する引数が必須です。また、-o パラメーターを使用してカバレッジ ファイルをダウンロードする場所を指定します。

mayhem download を使用してカバレッジ ファイルをダウンロードする作業の流れは次のようになります。

download-testme

まとめ

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