Peverify.exe(PEVerify 工具)

更新:2011 年 4 月

PEVerify 工具供生成 Microsoft 中间语言 (MSIL) 的开发人员(如编译器编写者、脚本引擎开发人员等)使用,帮助他们确定其 MSIL 代码及关联的元数据是否满足类型安全要求。 某些编译器只有在您避免使用某些语言构造时才生成可验证的类型安全代码。 如果您作为开发人员正在使用这样的编译器,则可能需要验证以确认您没有危害代码的类型安全性。 在这种情况下,可以对文件运行 PE 验证工具来检查 MSIL 和元数据。

安装 Visual Studio 和 Windows SDK 时会自动安装此工具。 要运行工具,我们建议您使用 Visual Studio 命令提示符或 Windows SDK 命令提示符(也称 CMD Shell)。 您可以使用这些实用程序轻松运行工具,而不需要导航到安装文件夹。 有关更多信息,请参见 Visual Studio 和 Windows SDK 命令提示

  • 如果您的计算机上已安装了 Visual Studio:在任务栏上依次单击 Start、All Programs、Visual Studio、Visual Studio Tools、Visual Studio Command Prompt。

    - 或 -

    如果您的计算机上已安装了 Windows SDK:在任务栏上依次单击 Start、All Programs、Windows SDK 文件夹和 Command Prompt(或CMD Shell)。

  • 在命令提示处,键入下列命令:

peverify filename [options]

参数

参数

说明

filename

要为其检查 MSIL 和元数据的可迁移可执行 (PE) 文件。

选项

说明

/break=最大错误计数

在出现 maxErrorCount 错误后中止验证。

此参数在 .NET Framework 2.0 版或更高版本中不受支持。

/clock

测量并报告下列验证时间(以毫秒为单位):

MD Val. cycle

元数据验证周期

MD Val. pure

元数据纯验证

IL Ver. cycle

Microsoft 中间语言 (MSIL) 验证周期

IL Ver pure

MSIL 纯验证

MD Val. cycleIL Ver. cycle 时间包括执行必要的启动和关闭过程所需的时间。 MD Val. pureIL Ver pure 时间反映了只执行验证或检验所需的时间。

/help

显示该工具的命令语法和选项。

/hresult

以十六进制格式显示错误代码。

/ignore=hex.code [, hex.code]

忽略指定的错误代码。

/ignore=@响应文件

忽略在指定的响应文件中列出的错误代码。

/il

针对在由 filename 指定的程序集中实现的方法执行 MSIL 类型安全验证检查。 除非指定 /quiet 选项,否则此工具为发现的每个问题返回详细的说明。

/md

针对由 filename 指定的程序集执行元数据验证检查。 这将遍历文件中的元数据结构并报告碰到的所有验证问题。

/nologo

禁止显示产品版本和版权信息。

/nosymbols

在 .NET Framework 2.0 版中,禁止显示行号以便向后兼容。

/quiet

指定安静模式;取消验证问题报告的输出。 Peverify.exe 仍会报告文件是否是类型安全的,但不会报告关于阻止类型安全验证的问题的信息。

/transparent

仅验证透明方法。

/unique

忽略重复的错误代码。

/verbose

在 .NET Framework 2.0 版中,显示 MSIL 验证消息中的附加信息。

/?

显示该工具的命令语法和选项。

备注

公共语言运行时依赖应用程序代码以类型安全的模式执行,帮助强制实现安全性和隔离机制。 通常情况下,代码如果不是可验证类型安全则不能运行,尽管可以设置安全策略以使受信任但无法验证的代码得以执行。

如果既未指定 /md 选项也未指定 /il 选项,则 Peverify.exe 执行两种类型的检查。 Peverify.exe 首先执行 /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 2.0 版或更高版本支持使用如下 MSIL 指令指定的可验证 byref 返回值:dup、ldsflda、ldflda、ldelema、call 和 unbox。

示例

下面的命令为在 myAssembly.exe 程序集中实现的方法执行元数据验证检查和 MSIL 类型安全验证检查。

peverify myAssembly.exe /md /il

上述请求成功完成后,Peverify.exe 显示下面的消息。

All classes and methods in myAssembly.exe Verified

下面的命令为在 myAssembly.exe 程序集中实现的方法执行元数据验证检查和 MSIL 类型安全验证检查。 此工具显示执行这些检查所需的时间。

peverify myAssembly.exe /md /il /clock

上述请求成功完成后,Peverify.exe 显示下面的消息。

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

或者,可将响应文件格式化成每行一个错误代码的格式。

0x12345678
0xABCD1234

请参见

参考

Visual Studio 和 Windows SDK 命令提示

概念

编写可验证为类型安全的代码

类型安全和安全性

其他资源

.NET Framework 工具

修订记录

Date

修订记录

原因

2011 年 4 月

添加了有关使用 Visual Studio 和 Windows SDK 命令提示符的信息。

信息补充。