首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PEVerify能告诉我每个错误的严重程度吗?

PEVerify能告诉我每个错误的严重程度吗?
EN

Stack Overflow用户
提问于 2015-08-09 21:07:40
回答 1查看 170关注 0票数 0

我正在使用Mono.Cecil修改程序集,我希望检查它的有效性(结果是否会运行)。我正在尝试使用PEVerify,但我遇到了一个问题。

它的设计目的是确保代码是可验证的,因此它只表示ERROR是否意味着IL完全无效且不会执行,或者它是否是完全信任地忽略的可验证性问题。下面是一些示例:

  1. 使用指针之类的。
  2. 当方法有局部变量时,不设置.locals init
  3. 从非构造函数方法调用.ctor

导致IL无法运行的问题包括:

  1. 成员无法从其使用的位置访问。
  2. 成员不存在。

有没有办法让我知道这个问题的严重性?如果没有,还有其他工具可以做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2015-08-13 06:01:50

@HansPassant已经试着解释了,但为了让我们大家都能理解,这是怎么回事。

PEVerify检查您的程序集是否有不正常的构造。也就是说,PEVerify不是JIT编译器。JIT编译器本身不检查IL程序集-它只是获取将要调用的方法,将其更改为SSA表单,优化它,编译它,然后调用生成的二进制程序集。

现在,编译器将随着时间的推移而发展。优化将被更改和添加,编译器的作用不一定是检查错误(如果它发现一个错误作为副产品,它可能会报告它,但没有保证)。记住,JIT编译器只为一件事进行了不懈的优化,那就是产生相当好的汇编程序字节代码(因为它是一种JIT语言,编译某事所需的时间是非常重要的)。那么两种不同的工具。

这基本上会导致以下情况:

  • 编译器将编译并执行给定的内容。
  • PEVerify将告诉您方法/程序集的结果是否已定义。

如果忽略PEVerify的错误,这基本上意味着结果将是未定义的行为--可以是从可执行文件到硬崩溃的任何内容。没有所谓的“警告”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31908847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档