Peverify.exe (средство PEVerify)

Средство PEVerify помогает разработчикам, создающим код на языке MSIL, — авторам компиляторов, обработчиков скриптов и т. д. — определить, соответствует ли этот код и связанные с ним метаданные требованиям безопасности типов. Некоторые компиляторы создают проверяемый типобезопасный код только в том случае, если разработчик не применяет определенные языковые конструкции. При работе с таким компилятором иногда требуется проверить, сохранена ли в коде безопасность типов. В этом случае для проверки кода MSIL и метаданных в файлах можно использовать инструмент PEVerify.

Эта программа автоматически устанавливается вместе с Visual Studio. Для запуска этого средства используйте Командную строку разработчика или PowerShell для разработчиков в Visual Studio.

Синтаксис

peverify filename [options]

Параметры

Аргумент Description
filename Переносимый исполняемый файл (PE-файл), который требуется проверить на корректность CIL и метаданных.
Вариант Описание
/break=maxErrorCount Прекращает проверку, если число ошибок в файле достигло значения параметра maxErrorCount.

Этот параметр не поддерживается в .NET Framework 2.0 и более поздних версий.
/clock Измеряет и выводит значения времени следующих проверок (в миллисекундах):

MD Val. cycle
Цикл проверки метаданных

MD Val. pure
Чистое время проверки метаданных

IL Ver. cycle
Цикл проверки языка CIL

IL Ver pure
Чистое время проверки языка CIL

Значения MD Val. cycle и IL Ver. cycle включают время, затраченное на необходимые процедуры запуска и завершения проверки. Значения MD Val. pure и IL Ver pure отражают время, требуемое только для проверки.
/help Отображает синтаксис команд и параметров программы.
/hresult Отображает коды ошибок в шестнадцатеричном формате.
/ignore=hex.code [, hex.code] Игнорирует ошибки с заданными кодами.
/ignore=@responseFile Игнорирует ошибки с кодами, перечисленными в указанном файле ответов.
/il Проверяет безопасность типов CIL для методов, реализованных в сборке, указанной в параметре filename. Если не задан параметр /quiet, средство выводит подробное описание всех обнаруженных проблем.
/md Проверяет метаданные в сборке, указанной в параметре filename. Средство проверяет всю структуру метаданных в файле и выводит описание всех обнаруженных проблем.
/nologo Отключает отображение сведений о версии продукта и авторских правах.
/nosymbols В платформа .NET Framework версии 2.0 номера строк подавляются для обратной совместимости.
/quiet Задает тихий режим. Отключает вывод сообщений об обнаруженных проблемах. Средство Peverify.exe все равно уведомляет, соблюдается ли безопасность типов в файле, однако не сообщает об обнаруженных проблемах.
/transparent Ограничивает проверку только прозрачными методами.
/unique Игнорирует повторяющиеся коды ошибок.
/verbose В платформа .NET Framework версии 2.0 отображаются дополнительные сведения в сообщениях проверки MSIL.
/? Отображает синтаксис команд и параметров программы.

Замечания

В среде CLR реализация механизмов безопасности и изоляции основана на типобезопасном выполнении кода приложения. Обычно код, для которого невозможно проверить типобезопасность, не выполняется, хотя можно настроить политику безопасности таким образом, чтобы допускалось выполнение доверенного непроверяемого кода.

Если параметры /md и /il не заданы, Peverify.exe проверяет как CIL, так и метаданные. Сначала Peverify.exe проверяет метаданные (параметр /md). Если ошибок нет, выполняется проверка CIL (параметр /il). Если задан и параметр /md, и параметр /il, проверка по параметру /il производится даже при наличии ошибок в метаданных. Поэтому при отсутствии ошибок в метаданных команда peverify имя_файла эквивалентна команде peverify имя_файла /md /il.

Средство Peverify.exe осуществляет полную проверку CIL на основе анализа потоков данных и проверяет правильность метаданных на основе списка из нескольких сотен правил. Дополнительные сведения о проверках, выполняемых Peverify.exe, см. в документах со спецификацией проверки метаданных и спецификацией набора инструкций MSIL в папке Tools Developers Guide в Windows SDK.

На платформе .NET Framework 2.0 и более поздних версий поддерживается возврат проверяемых значений byref, заданных с использованием следующих инструкций MSIL: dup, ldsflda, ldflda, ldelema, call и unbox.

Примеры

Следующая команда проверяет метаданные и безопасность типов CIL для методов, реализованных в сборке myAssembly.exe.

peverify myAssembly.exe /md /il

После успешного завершения обработки этого запроса Peverify.exe отображает следующее сообщение.

All classes and methods in myAssembly.exe Verified

Следующая команда проверяет метаданные и безопасность типов CIL для методов, реализованных в сборке myAssembly.exe. Средство отображает затраченное на проверку время.

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

Следующая команда проверяет метаданные и безопасность типов CIL для методов, реализованных в сборке myAssembly.exe. Однако 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

См. также