我编写了一些自定义 IL,但它不会通过 PEVerify。我得到的错误是
$ peverify foo.exe Microsoft (R) .NET Framework PE 验证程序。版本 4.0.30319.17929 版权所有 (c) 微软公司。版权所有。 [IL]:错误:[Z:\virtualbox_shared\foo.exe : HelloWorld.Program::Main][offset 0x00000021] 所有点的堆栈高度必须在 IL 的单次前向扫描中确定。 1 验证 foo.exe 的错误
然而,该程序将运行良好,没有任何异常。下面是相关方法的IL:
.method private static hidebysig
default void Main (string[] args) cil managed
{
// Method begins at RVA 0x2050
.entrypoint
// Code size 54 (0x36)
.maxstack 2
//custom IL
ldc.i4 1
ldc.i4 1
ceq
switch(first, second)
first:
ldc.i4 1
br.s temp
popit: pop
br.s second
temp: ldc.i4 1
brfalse temp2
temp2: br.s popit
second:
ldc.i4 2
pop
ret
} // end of method Program::Main
完整的源代码在pastebin
为什么我会收到此错误?