我正在通过C#阅读CLR,并且作为IL和验证部分的一部分,提到了以下内容.
"在将IL编译为本机指令时,CLR执行称为Verification的过程.Verificaiton检查高级IL代码并确保代码执行的所有操作都是安全的.例如,验证检查每个方法是否使用正确数量的参数调用,传递给每个方法的每个参数都是正确的类型......"
我的问题如下:
- C#编译器本身检查函数是否以正确的参数数量和类型传递.那么这个验证意味着什么.
- 这是否意味着对象的运行时类型标识是作为此过程的一部分完成的,特别是is/as cast操作.
任何人都可以对此有所了解.
C#编译器本身检查函数是否以正确的参数数量和类型传递.那么这个验证意味着什么.
可以将C#编译器看作CLR的前端(许多可能的前端之一).CLR无法将IL代码验证责任委托给其他任何人(在此过程的早期阶段),因为否则无法确定IL代码是否安全.没有任何其他可靠的力阻止编译器(其输出)和CLR之间的攻击,修改编译器生成的IL代码.
这是否意味着对象的运行时类型标识是作为此过程的一部分完成的,特别是is/as cast操作.
要进一步评论您的问题is/ as部分:运行时类型标识在运行时完成.IL验证发生在我称之为"即时编译时"的时刻.因此,在实际执行时,不会对is/ as进行评估.