我正在寻找一种可以静态发现C程序中不变量的工具。我检查了Daikon但它只是动态发现不变量。
是否有可用于我正在寻找的工具?谢谢!
答案 0 :(得分:5)
见The SLAM project: debugging system software via static analysis。它声称可以静态推断不变量,就像你要求的那样,C语言。作者汤姆·鲍尔(Tom Ball)因其在节目分析方面的出色表现而广为人知。
答案 1 :(得分:4)
如果你的意思是"不变的"从最广泛的意义上讲,正如Daikon所使用的链接页面所使用的那样,许多静态分析工具的工作可以被描述为“发现不变量”,而不是您正在寻找的表达不变量。
Frama-C的价值分析会为每个陈述累积其结果,即所有变量的可能值。在分析结束时,它可以在每个语句中呈现关于程序中每个变量的域变化的非关系信息。在this screenshot中,对于此确定性程序的所有执行,不变量是S
在所选指令之前始终为0,1,3或6。
你问题中的两个隐藏参数是你感兴趣的不变量的形状,以及你想要找到这些不变量的程序的形状。例如,在Ira的答案中提到的SLAM旨在处理设备驱动程序代码,并推断仅包含用于验证系统API正确使用的必要信息的不变量。另一个工具Astrée以在推断飞行控制软件运行安全性的正确不变量方面做得非常出色而闻名。
两个自由度构成了非常大的设计空间。你不会发现任何适用于各种C程序的东西,并推断出你可能感兴趣的所有不变量,但是如果你针对特定的应用领域和各种不变量优化你的问题,你将有更好的机会找到相关的答案。