提问:使用过时的C编译器存在安全隐患吗?
我们在构建一些生产系统中没有人会在乎这些设备上运行老GCC版本是GCC3还是GCC2。
况且我说服不了管理层将它们升级到最新版,他们说:“只要不出问题,不用管它。”
直到现在我们还在维护一段非常老的代码(80年代写的),这段C89标准的代码在编译器上编译的也很好。
我不确定用这个老东东是否是个好主意。
我的问题是:使用旧的C编译软件损害编译程序的安全性吗?
【问题补充】
由Visual Studio 2008创建实现windows目标的同样功能代码,MSVC不支持C99或者C11标准(我不知道更新的MSVC是否支持),在我的linux机器上用最新的GCC编译器能够构建它。所以如果我们放弃更新的GCC编译器上编译它的话程序可能会构建的和以前一样好。
投票最多的回答:
其实我不认同这个观点。
在很多情况下C语言标准导致的行为是不确定的,在给定的平台上使用“愚蠢的编译器”会发生什么是显而易见的。像这种情况一个有符号整数用不同类型的两种变量表示可能导致溢出或访问相同的内存。
最新版本的GCC(和clang)编译器已经开始应对这种情况,优化条件是不需要关注在未定义的情况下二进制行为是如何变化的。如果你的代码库是一个对待C语言像便携式汇编语言一样的人编写,这会非常糟糕。
有编译器能够切换到传统版(-fwrapv 和-fno-strict-aliasing是我上述提到的两种情况),但是首先你得知道它们。
在原则上,编译Bug可能会使兼容代码编译成一个安全漏洞,我认为这个风险在事物的宏伟计划前可以忽略不计,即尽量避免风险。
若有兴趣,可关注我的微信公众号:学点编程吧