当我对我的.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关键字,我认为这就是导致这个错误的原因。但是我在网上找不到任何关于这个错误的文档,所以任何想法都将不胜感激。谢谢!
发布于 2010-07-08 01:10:16
这并不是因为你使用了unsafe关键字。这是因为你编写了编译的代码,因为你使用了unsafe。是的,peverify会对这样的代码犹豫不决。这就是不安全的本质。你不能在这里既吃蛋糕又吃蛋糕。
发布于 2010-07-08 03:26:41
你在这些方法中使用stackalloc了吗?在我尝试这一点的时候,我发现如果stackalloc是第一次出现不可验证的代码,那么peverify就会吐出错误消息,并忽略方法的其余部分。然而,事实并非如此。如果稍后在方法中出现stackalloc,则其他错误将在stackalloc语句生成的错误之前出现。也许这就是bug?
考虑下面的例子。
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.exehttps://stackoverflow.com/questions/3196399
复制相似问题