在最近的一个项目中,一位客户 QA 代表拜访了我,他问了我一个我以前没有真正考虑过的问题:
How do you know that the compiler you are using generates machine code that matches the c code's functionality exactly and that the compiler is fully deterministic?
对于这个问题,我完全没有回答,因为我一直认为编译器是理所当然的。它接收代码并输出机器代码。我怎样才能着手测试编译器实际上没有添加我没有要求的功能?或者更危险地以与我期望的方式略有不同的方式实现代码?
我知道这对每个人来说可能不是真正的问题,而且答案可能只是......“你已经过时了并处理它”。但是,在嵌入式环境中工作时,您暗中信任您的编译器。我如何向自己和 QA 证明我这样做是正确的?
最佳答案
您可以在任何级别应用该论点:您信任第三方图书馆吗?你相信操作系统吗?你信任处理者吗?
Ken Thompson 如何将后门放入原始“登录”程序中……并修改了 C 编译器,这样即使您重新编译登录,您仍然可以获得后门。看这个posting了解更多详情。
关于加密算法也提出了类似的问题——我们如何知道 DES 中没有可供 NSA 窥探的后门?
最后,您必须决定您是否足够信任您正在构建的基础架构而不必担心它,否则您必须开始开发自己的硅芯片!
关于C(或任何)编译器确定性性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60547/