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