【问题标题】:application robustness and security benefit of ILIL 的应用程序稳健性和安全性优势
【发布时间】:2021-04-21 17:24:33
【问题描述】:

我正在通过 C# 阅读 CLR 书,上面写着:

IL(中间语言)的最大好处不是它抽象出底层的 CPU。 IL 提供的最大好处是应用程序的健壮性和安全性。在将 IL 编译为本机 CPU 指令时,CLR 执行称为验证的过程。验证检查高级 IL 代码并确保代码所做的一切都是安全的。例如,验证检查是否使用正确数量的参数调用每个方法、传递给每个方法的每个参数是否具有正确的类型、是否正确使用每个方法的返回值、是否每个方法都有返回语句等等

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

【问题讨论】:

  • 例如,如果您编写 DLL A 来调用 DLL B,然后更改 DLL B,是否会有所帮助?

标签: c# clr


【解决方案1】:

例如,在 C/C++ 中,您可以获取函数指针并将其转换为您喜欢的任何内容,因此您可以将其转换为不符合原始函数规范的函数指针,然后像这样调用它这会导致访问冲突、堆栈损坏或任何其他未定义的行为。

已验证IL 的好处体现在提供内存安全类型安全

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

IL 的好处可以看作是在编译时提供所有已定义的行为并防止所有类别的错误,这与 C/C++ 可能发生未定义行为的情况相反很容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2011-11-03
    • 2019-07-24
    • 2022-11-02
    • 2012-08-14
    • 2011-07-04
    • 1970-01-01
    相关资源
    最近更新 更多