.net 如何强制CLR运行验证?
下面的代码通过了CLR验证(您可以尝试使用.net 如何强制CLR运行验证?,.net,clr,cil,type-safety,.net,Clr,Cil,Type Safety,下面的代码通过了CLR验证(您可以尝试使用ilasm.exe组装它,并运行生成的.exe,没有任何错误--我正在使用CLR v4.0.30319测试它) 但是,如果在生成的.exe上运行PEverify.exe,它将报告: 堆栈上出现意外类型 关于我传递给Console::WriteLine(string)方法的无效对象Exception 为什么CLR不运行验证?那么,我们如何强制CLR运行它呢 .assembly extern mscorlib { .publickeytoken =
ilasm.exe
组装它,并运行生成的.exe
,没有任何错误--我正在使用CLR v4.0.30319测试它)
但是,如果在生成的.exe
上运行PEverify.exe
,它将报告:
堆栈上出现意外类型
关于我传递给Console::WriteLine(string)
方法的无效对象Exception
为什么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
}
}
抖动中内置的验证器存在漏洞,无法捕获所有内容。您必须使用connect.microsoft.com,但他们可能会忽略它。您不希望抖动运行PEVerify,因为它会失败,例如在编译器生成的类中,并且与Hans answer一样,抖动验证器可能存在漏洞。