这显然是,这将消除缓冲区溢出和格式字符串漏洞在C / C ++程序,我会通过提供硬件支持,例如转换猜测的延伸scanf到fgets自动,或沿这些行的东西。这个扩展会改变 C/C++ 作为危险语言的声誉吗?C/C++ 最终会完全安全使用吗?还是整数溢出等其他漏洞仍然是一个问题?MPX 有什么理由不把 C/C++ 变成一种完全安全的语言?我对 MPX 不是很熟悉,我想听听熟悉的人的意见。
如果这个问题太笼统,我深表歉意。欢迎提出缩小范围的建议。
这显然是,这将消除缓冲区溢出和格式字符串漏洞在C / C ++程序,我会通过提供硬件支持,例如转换猜测的延伸scanf到fgets自动,或沿这些行的东西。这个扩展会改变 C/C++ 作为危险语言的声誉吗?C/C++ 最终会完全安全使用吗?还是整数溢出等其他漏洞仍然是一个问题?MPX 有什么理由不把 C/C++ 变成一种完全安全的语言?我对 MPX 不是很熟悉,我想听听熟悉的人的意见。
如果这个问题太笼统,我深表歉意。欢迎提出缩小范围的建议。
首先,C++ 有足够的自由度,计算机无法使其完全安全。从字面上看,C++ 让您可以完全访问 CPU 可以做的任何事情。
像 fscanf 这样的函数只是在内部进行循环和检查的例程,以便为您提供更高级别的功能。但是, fscanf 不知道缓冲区的距离(即它有多大)。代码中唯一具有该信息的部分是 malloc 库,但这也只是一种更高级的算法,可以使硬件不知道的事情变得更容易。
理论上,编译器可以存储这些信息并将其传递给 MPX 扩展,但在许多应用程序中这几乎是不可能的,因为大多数东西都是void*手动存储和传递的,因此静态分析器无法获得设置这些寄存器的必要信息. 做到这一点的唯一方法是在运行时存储额外的信息,从而改变它的大小void*会违反 C++ 的规则,所以它必须是一种特殊类型,很少有开发人员会实际实现,因为它会花费太多.
缓冲区溢出发生在开发人员懒惰的时候,而不是硬件出现问题的时候。
这仅仅是一个在软件中可能存在的错误,使人们不安全的。有几个错误是整数溢出,无效逻辑等。
所以不,它不会使 C++ 完全安全使用 - 什么都不会。