Peverify.exe (ferramenta PEVerify)

A ferramenta PEVerify ajuda desenvolvedores que geram MSIL (como gravadores de compiladores e desenvolvedores de mecanismos de script) a determinar se o código MSIL e os metadados associados atendem aos requisitos de segurança de tipo. Alguns compiladores só gerarão código fortemente tipado verificável se você evitar usar determinados constructos de linguagem. Se estiver usando um compilador assim, você talvez queira verificar se não comprometeu a segurança de tipo do código. É possível executar a ferramenta PEVerify nos arquivos para verificar MSIL e metadados.

Essa ferramenta é instalada automaticamente com o Visual Studio. Para executar a ferramenta, use o Prompt de Comando do Desenvolvedor do Visual Studio ou o PowerShell do Desenvolvedor do Visual Studio.

Sintaxe

peverify filename [options]

Parâmetros

Argumento Descrição
filename O arquivo PE (Portable Executable) para o qual MSIL e metadados devem ser verificados.
Opção Descrição
/break=maxErrorCount Anula a verificação depois de erros maxErrorCount.

Esse parâmetro não é compatível no .NET Framework versão 2.0 ou posterior.
/clock Mede e relata os seguintes tempos de verificação em milissegundos:

MD Val. cycle
Ciclo de validação dos metadados

MD Val. pure
Validação dos metadados pura

IL Ver. cycle
Ciclo de verificação MSIL

IL Ver pure
Verificação MSIL pura

Os tempos de MD Val. cycle e IL Ver. cycle incluem o tempo necessário para a realização de procedimentos de inicialização e desligamento necessários. Os tempos de MD Val. pure e IL Ver pure refletem o tempo necessário para a realização da validação ou apenas da verificação.
/help Exibe sintaxe de comando e opções para a ferramenta.
/hresult Exibe códigos de erro em formato hexadecimal.
/ignore=hex.code [, hex.code] Ignora os códigos de erro especificados.
/ignore=@responseFile Ignora os códigos de erro listados no arquivo de resposta especificado.
/il Realiza verificação de segurança do tipo MSIL dos métodos implementados no assembly especificado por filename. A ferramenta retorna descrições detalhadas para cada problema encontrado, a menos que você especifique a opção /quiet.
/md Realiza verificações de validação de metadados no assembly especificado por filename. Essa opção analisa a estrutura de metadados completa dentro do arquivo e relata todos os problemas de validação encontrados.
/nologo Suprime a exibição da versão do produto e as informações de direitos autorais.
/nosymbols No .NET Framework versão 2.0, suprime números de linha para compatibilidade com versões anteriores.
/quiet Especifica o modo silencioso; suprime saída dos relatórios de problema de verificação. Peverify.exe ainda relata se o arquivo é fortemente tipado, mas não relata informações sobre problemas que impeçam a verificação de segurança do tipo.
/transparent Verifique apenas os métodos transparentes.
/unique Ignora códigos de erro repetidos.
/verbose No .NET Framework versão 2.0, exibe informações adicionais em mensagens de verificação MSIL.
/? Exibe sintaxe de comando e opções para a ferramenta.

Comentários

O Common Language Runtime depende na execução fortemente tipada do código de aplicativo para ajudar a impor mecanismos de segurança e isolamento. Normalmente, o código que não é fortemente tipado verificável não pode ser executado, embora seja possível definir a política de segurança para permitir a execução de código confiável, mas não verificável.

Se as opções /md ou /il não forem especificadas, Peverify.exe realizará ambos os tipos de verificações. Peverify.exe realiza as verificações de /md primeiro. Se não houver erros, as verificações de /il serão feitas. Se você especificar /md e /il, as verificações de /il serão feitas mesmo se houver erros nos metadados. Por isso, se não houver erros de metadados, peverifyfilename equivalerá a peverifyfilename/md/il.

Peverify.exe realiza verificações MSIL abrangentes com base na análise do fluxo de dados mais uma lista de várias centenas de regras em metadados válidos. Saiba mais sobre as verificações realizadas por Peverify.exe em "Especificação de Validação dos Metadados" e em "Especificação do Conjunto de Instruções MSIL" na pasta Guia de Desenvolvedores de Ferramentas no SDK do Windows.

O .NET Framework versão 2.0 ou posterior dá suporte a retornos de byref verificáveis usando as seguintes instruções MSIL: dup, ldsflda, ldflda, ldelema, call e unbox.

Exemplos

O comando a seguir realiza verificações de validação dos metadados e verificações de segurança fortemente tipada MSIL para métodos implementados no assembly myAssembly.exe.

peverify myAssembly.exe /md /il

Mediante a conclusão bem-sucedida da solicitação acima, Peverify.exe exibe a mensagem a seguir.

All classes and methods in myAssembly.exe Verified

O comando a seguir realiza verificações de validação dos metadados e verificações de segurança fortemente tipada MSIL para métodos implementados no assembly myAssembly.exe. A ferramenta exibe o tempo necessário à realização dessas verificações.

peverify myAssembly.exe /md /il /clock

Mediante a conclusão bem-sucedida da solicitação acima, Peverify.exe exibe a mensagem a seguir.

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

O comando a seguir realiza verificações de validação dos metadados e verificações de segurança fortemente tipada MSIL para métodos implementados no assembly myAssembly.exe. Peverify.exe para, no entanto, quando alcança a contagem de erros máxima de 100. A ferramenta também ignora os códigos de erro especificados.

peverify myAssembly.exe /break=100 /ignore=0x12345678,0xABCD1234

O comando a seguir produz o mesmo resultado que o exemplo anterior acima, mas especifica os códigos de erro que serão ignorados no arquivo de resposta ignoreErrors.rsp.

peverify myAssembly.exe /break=100 /ignore@ignoreErrors.rsp

O arquivo de resposta pode conter uma lista separada por vírgulas de códigos de erro.

0x12345678, 0xABCD1234

O arquivo de resposta também pode ser formatado com um código de erro por linha.

0x12345678
0xABCD1234

Confira também