IL 的应用程序稳健性和安全性优势

application robustness and security benefit of IL

我正在通过 C# 书阅读 CLR,其中说:

the biggest benefit of IL(intermediate language) isn’t that it abstracts away the underlying CPU. The biggest benefit IL provides is application robustness and security. While compiling IL into native CPU instructions, the CLR performs a process called verification. Verification examines the high-level IL code and ensures that everything the code does is safe. For example, verification checks that every method is called with the correct number of parameters, that each parameter passed to every method is of the correct type, that every method’s return value is used properly, that every method has a return statement, and so on

我有点困惑,对于不使用 IL 的 C 或 C++,如果我们定义一个接受一个参数但不带参数调用它的方法,gcc 将抛出一个异常,表明有太多争论很少,所以 C 或 C++ 也可以在没有中间语言概念的情况下提供健壮性和安全性,那么使用 IL 的真正好处是什么?

在C/C++中你可以,例如,把一个函数指针转换成你喜欢的任何东西,这样你就可以把它转换成一个不符合原始规范的函数指针函数,然后这样调用它,导致访问冲突、堆栈损坏或任何其他未定义的行为。

已验证 IL 的优势体现在提供内存安全类型安全.

  • 内存安全 规定只能在代码已获得访问权限的情况下访问内存位置。
    因此,例如,您不能读取任意位置、执行指针运算、溢出缓冲区或读取未初始化的内存。
  • 类型安全 规定只能以定义的方式读取和写入内存位置。
    因此,例如,您不能将错误的类型放入其中:整数到结构位置,或对象引用到字符串位置,强制转换为错误类型或使用错误类型作为参数调用函数。这也保护了已定义行为的堆栈。

IL 的好处可以看作是在编译时为所有内容提供定义的行为并防止类 错误 ,而不是 C/C++,其中未定义的行为很容易发生。