PEVerify ツール (Peverify.exe)
PEVerify ツールは、Microsoft Intermediate Language (MSIL) を生成する開発者 (コンパイラの作成者、スクリプト エンジンの開発者など) が、生成する MSIL コードと関連メタデータがタイプ セーフ要件を満たしているかどうかを確認する場合に役立ちます。一部のコンパイラでは、特定の言語構成を使用しなかった場合にだけ、検査可能でタイプ セーフなコードが生成されます。このようなコンパイラを使用している場合、生成したコードがタイプ セーフかどうかを確認する必要があると思う開発者もいるはずです。そのような場合は、ファイルに対して PEVerify ツールを実行し、MSIL とメタデータを検査できます。
peverify filename [options]
パラメータ
引数 | 説明 |
---|---|
filename |
MSIL とメタデータを検査する対象のポータブル実行可能 (PE) ファイル。 |
オプション | 説明 |
---|---|
/break= maxErrorCount |
maxErrorCount のエラーが発生した後で検査を中止します。 このパラメータは、.NET Framework Version 2.0 以降ではサポートされません。 |
/clock |
次の検査時間をミリ秒単位で計測して報告します。
MD Val. cycle 時間および IL Ver. cycle 時間には、必要なスタートアップ手順およびシャットダウン手順を実行するために必要な時間が含まれます。MD Val. pure 時間および IL Ver pure 時間は、検査または検証だけを行うために要する時間を反映します。 |
/help |
このツールのコマンド構文とオプションを表示します。 |
/hresult |
エラーコードを 16 進形式で表示します。 |
/ignore= hex.code [, hex.code] |
指定したエラー コードを無視します。 |
/ignore=@ responseFile |
指定した応答ファイル内に一覧表示されているエラー コードを無視します。 |
/il |
filename で指定したアセンブリに実装されているメソッドに対して、MSIL がタイプ セーフかどうかを検査します。/quiet オプションを指定した場合を除き、検出された問題ごとに詳細な説明が返されます。 |
/md |
filename で指定したアセンブリに対して、メタデータを検査します。この場合、ファイル内のすべてのメタデータ構造が検査され、検出された問題がすべて報告されます。 |
/nologo |
製品バージョンと著作権情報を表示しません。 |
/nosymbols |
.NET Framework Version 2.0 で、後方互換性のために行番号を表示しません。 |
/quiet |
クワイエット モードを指定します。このモードでは、検査により検出された問題の報告が簡略化されます。ファイルがタイプ セーフかどうかは報告されますが、タイプ セーフでない場合に、その問題に関する情報は報告されません。 |
/unique |
繰り返し発生するエラー コードを無視します。 |
/verbose |
.NET Framework Version 2.0 で、MSIL 検証メッセージに追加情報を表示します。 |
/? |
このツールのコマンド構文とオプションを表示します。 |
解説
共通言語ランタイムは、セキュリティ機構や分離機構の実施を簡単にするために、アプリケーション コードがタイプ セーフに実行されることに依存しています。通常、検査可能でタイプ セーフなコード以外のコードは実行できません。しかし、信頼できるが検査を実行できないコードを実行可能にするセキュリティ ポリシーを設定することはできます。
/md と /il のいずれのオプションも指定しない場合は、両方の種類の検査が実行されます。まず、/md オプションによる検査が実行されます。エラーが検出されない場合は、/il オプションによる検査が実行されます。/md と /il の両方のオプションを指定した場合は、メタデータの検査でエラーが検出された場合でも、/il オプションによる検査が実行されます。つまり、メタデータの検査でエラーが検出されないときは、peverify filename と peverify filename /md /il のいずれを指定しても同じ検査が実行されます。
Peverify.exe は、データ フローの分析と、メタデータの有効性に関する多数の規則のリストに基づいて、MSIL に対する包括的な検査を実行します。Peverify.exe によって実行される検査の詳細については、.NET Framework SDK の「Tools Developers Guide」内の Metadata Validation の仕様および MSIL Instruction Set の仕様を参照してください。
.NET Framework Version 2.0 以降では、dup
、ldsflda
、ldflda
、ldelema
、call
、および unbox
の各 MSIL 命令を使用して指定する検証可能な byref
戻り値をサポートします。
例
アセンブリ myAssembly.exe
に実装されているメソッドに対して、メタデータの有効性および MSIL がタイプ セーフかどうかについて検査するコマンドを次に示します。
peverify myAssembly.exe /md /il
上記の要求が正常に終了した場合は、次のメッセージが表示されます。
All classes and methods in myAssembly.exe Verified
アセンブリ myAssembly.exe
に実装されているメソッドに対して、メタデータの有効性および MSIL がタイプ セーフかどうかについて検査するコマンドを次に示します。このツールは、これらの検査に要する時間を表示します。
peverify myAssembly.exe /md /il /clock
上記の要求が正常に終了した場合は、次のメッセージが表示されます。
All classes and methods in myAssembly.exe Verified
Timing: Total run 320 msec
MD Val.cycle 40 msec
MD Val.pure 10 msec
IL Ver.cycle 270 msec
IL Ver.pure 230 msec
アセンブリ myAssembly.exe
に実装されているメソッドに対して、メタデータの有効性および MSIL がタイプ セーフかどうかについて検査するコマンドを次に示します。しかし、Peverify.exe は、最大エラー カウントである 100 に達すると、停止します。このツールは、指定されたエラー コードも無視します。
peverify myAssembly.exe /break=100 /ignore=0x12345678,0xABCD1234
上記の例と結果は同じですが、無視するエラー コードを応答ファイル ignoreErrors.rsp に指定するコマンドを次に示します。
peverify myAssembly.exe /break=100 /ignore@ignoreErrors.rsp
この応答ファイルには、エラー コードの一覧をコンマで区切って指定できます。
0x12345678, 0xABCD1234
また、エラー コードを 1 行に 1 つという形式で指定することもできます。
0x12345678
0xABCD1234
参照
関連項目
.NET Framework ツール
SDK のコマンド プロンプト