Peverify.exe (PEVerify ツール)
PEVerify ツールは、Microsoft Intermediate Language (MSIL) を生成する開発者 (コンパイラの作成者やスクリプト エンジンの開発者など) が、生成する MSIL コードと関連メタデータがタイプ セーフ要件を満たしているかどうかを確認する場合に役立ちます。 一部のコンパイラでは、特定の言語構成を使用しなかった場合にだけ、検査可能でタイプ セーフなコードが生成されます。 このようなコンパイラを使用している場合、コードのタイプ セーフ性が損なわれていないかを確認することが推奨されます。 ファイルに対して PEVerify ツールを実行し、MSIL とメタデータを検査できます。
このツールは、Visual Studio と共に自動的にインストールされます。 ツールを実行するには、、Visual Studio 開発者コマンド プロンプトまたは Visual Studio Developer PowerShell を使用します。
構文
peverify filename [options]
パラメーター
Argument | 説明 |
---|---|
ファイル名 | MSIL とメタデータを検査する対象のポータブル実行可能 (PE) ファイル。 |
オプション | 説明 |
---|---|
/break= maxErrorCount | maxErrorCount エラーが発生した後で検査を中止します。 このパラメーターは、.NET Framework Version 2.0 以降ではサポートされません。 |
/clock | 次の検査時間をミリ秒単位で計測して報告します。 MD Val. cycle メタデータ検証サイクル MD Val. pure メタデータ検証のみ IL Ver. cycle Microsoft Intermediate Language (MSIL) 検証サイクル IL Ver pure MSIL 検証のみ 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 バージョン 2.0 では、後方互換性のために行番号は表示されません。 |
/quiet | クワイエット モードを指定します。このモードでは、検査により検出された問題の報告が簡略化されます。 ファイルがタイプ セーフかどうかは報告されますが、タイプ セーフでない場合に、その問題に関する情報は報告されません。 |
/transparent |
透過的なメソッドのみを検証します。 |
/unique | 繰り返し発生するエラー コードを無視します。 |
/verbose | .NET Framework バージョン 2.0 で、MSIL 検証メッセージに追加情報を表示します。 |
/? | このツールのコマンド構文とオプションを表示します。 |
Remarks
共通言語ランタイムは、セキュリティ機構や分離機構の実施を簡単にするために、アプリケーション コードがタイプ セーフに実行されることに依存しています。 通常、検査可能でタイプ セーフなコード以外のコードは実行できません。しかし、信頼できるが検査を実行できないコードを実行可能にするセキュリティ ポリシーを設定することはできます。
/md と /il のいずれのオプションも指定しない場合は、両方の種類の検査が実行されます。 まず、 /md オプションによる検査が実行されます。 エラーが検出されない場合は、 /il オプションによる検査が実行されます。 /md と /il の両方のオプションを指定した場合は、メタデータの検査でエラーが検出された場合でも、 /il オプションによる検査が実行されます。 つまり、メタデータの検査でエラーが検出されないときは、peverify filename は peverify filename /md /il と同等です。
Peverify.exe は、データ フローの分析と、メタデータの有効性に関する多数の規則のリストに基づいて、MSIL に対する包括的な検査を実行します。 Peverify.exe によって実行される検査の詳細については、Windows SDK の Tools Developers Guide フォルダー内にある "Metadata Validation Specification" (メタデータ検証仕様) と "MSIL Instruction Set Specification" (MSIL 命令セット仕様) を参照してください。
.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