下面的代码通过了CLR验证(您可以尝试将其与ilasm.exe
组合在一起并运行生成的.exe
而不会出现任何错误 - 我正在使用CLR v4.0.30319对其进行测试)。
但是,如果您对生成的PEverify.exe
投放.exe
,则会报告:
堆栈上的意外类型。
关于我传递给Exception
方法的无效对象Console::WriteLine(string)
。
为什么CLR没有运行验证?而且,我们如何强制CLR运行它呢?
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
.ver 4:0:0:0
}
.assembly TypeSafe
{
}
.class TypeSafe
{
.method static void Start()
{
.entrypoint
ldstr "Exception instead of String"
newobj instance void [mscorlib]System.Exception::.ctor(string)
call void [mscorlib]System.Console::WriteLine(string)
ldstr "I'm ok"
call void [mscorlib]System.Console::WriteLine(string)
ret
}
}