由于使用 [] 运算符进行的常规数组访问是不受检查的,因此当您的程序由于缓冲区溢出而存在远程代码执行漏洞或数据泄漏时,这并不好玩。
大多数标准数组容器包含
这基本上消除了缓冲区溢出任意代码执行漏洞,并且还有一个 clang-tidy check,警告您在索引非常量时应使用
大多数托管语言都有已检查的数组,它们的编译器可以在可以的情况下消除检查。
我知道 C++ 编译器可以进行很棒的优化。问题是,当它们看到不能溢出时,C++ 编译器能否消除对
大多数标准数组容器包含
at()
方法,它允许对数组元素进行边界检查访问。这使得越界的数组访问被定义明确(抛出异常),而不是未定义的行为。这基本上消除了缓冲区溢出任意代码执行漏洞,并且还有一个 clang-tidy check,警告您在索引非常量时应使用
at()
。所以我在很多地方进行了更改。大多数托管语言都有已检查的数组,它们的编译器可以在可以的情况下消除检查。
我知道 C++ 编译器可以进行很棒的优化。问题是,当它们看到不能溢出时,C++ 编译器能否消除对
at()
的调用?