关于peverify错误的问题

时间:2010-07-07 15:41:05

标签: .net peverify

当我对我的.NET exe运行peverify实用程序时,我得到一些错误(类,方法被重命名):

[IL]: Error: [myapp.exe : namespace.class::method1][offset 0x00000027]
Instruction cannot be verified.

[IL]: Error: [myapp.exe : namespace.class::method2][offset 0x00000027]
Instruction cannot be verified.

[IL]: Error: [myapp.exe : namespace.class::method3][offset 0x00000313]
Instruction cannot be verified.

这是我应该关注的吗?这些方法都使用unsafe关键字,我假设这是导致此错误的原因。但是我在网上找不到任何关于这个错误的文档,所以任何想法都会非常感激。谢谢!

2 个答案:

答案 0 :(得分:2)

嗯,这不是因为您使用了 unsafe 关键字。这是因为你编写了编译的代码,因为你使用的是不安全的。是的,peverify将不愿意这样的代码。这是不安全的本质。你不能吃蛋糕,也不能吃。

答案 1 :(得分:1)

您是否在这些方法中使用stackalloc?当我正在玩这个时,我发现如果stackalloc是第一次出现无法验证的代码,那么peverify会抛出该错误消息并忽略方法的其余部分。然而,事实恰恰相反。如果stackalloc稍后出现在方法中,则其他错误将在stackalloc语句生成的错误之前。也许这是错误的?

请考虑以下示例。

public static void Main()
{
  unsafe
  {
    int* a = stackalloc int[100];
    int* b = null;
  }
}

我得到以下结果:

[IL]: Error: [myassembly.exe : A.Program::Main][offset 0x00000007] Instruction cannot be verified. 
1 Error(s) Verifying myassembly.exe

但是,如果我注释掉stackalloc行,那么我会得到以下结果:

[IL]: Error: [myassembly.exe : A.Program::Main][offset0x00000004][found Native Int][expected unmanaged pointer] Unexpected type on the stack. 
1 Error(s) Verifying myassembly.exe