我正在使用Mono.Cecil修改程序集,我希望检查它的有效性(结果是否会运行)。我正在尝试使用PEVerify,但我遇到了一个问题。
它的设计目的是确保代码是可验证的,因此它只表示ERROR是否意味着IL完全无效且不会执行,或者它是否是完全信任地忽略的可验证性问题。下面是一些示例:
.locals init。.ctor。导致IL无法运行的问题包括:
有没有办法让我知道这个问题的严重性?如果没有,还有其他工具可以做到这一点吗?
发布于 2015-08-13 06:01:50
@HansPassant已经试着解释了,但为了让我们大家都能理解,这是怎么回事。
PEVerify检查您的程序集是否有不正常的构造。也就是说,PEVerify不是JIT编译器。JIT编译器本身不检查IL程序集-它只是获取将要调用的方法,将其更改为SSA表单,优化它,编译它,然后调用生成的二进制程序集。
现在,编译器将随着时间的推移而发展。优化将被更改和添加,编译器的作用不一定是检查错误(如果它发现一个错误作为副产品,它可能会报告它,但没有保证)。记住,JIT编译器只为一件事进行了不懈的优化,那就是产生相当好的汇编程序字节代码(因为它是一种JIT语言,编译某事所需的时间是非常重要的)。那么两种不同的工具。
这基本上会导致以下情况:
如果忽略PEVerify的错误,这基本上意味着结果将是未定义的行为--可以是从可执行文件到硬崩溃的任何内容。没有所谓的“警告”。
https://stackoverflow.com/questions/31908847
复制相似问题