使用Frama-C的影响分析时,如何避免检测未初始化的变量

时间:2017-11-13 03:42:16

标签: frama-c impact-analysis

我发现如果程序中存在未初始化的左值(例如变量X),Frama-C断言X已经初始化,但断言使最终状态无效。似乎Frama-C在检测到无效的最终状态后停止分析,因此影响分析的实际结果(受影响的陈述)只是理想结果的一部分。我希望Frama-C能够进行影响分析而不管那些未初始化的变量,但我还没有找到任何相关的选项。如何处理这个问题?

1 个答案:

答案 0 :(得分:2)

您正在调用ISO C标准附录J.2中所示的未定义行为“在不确定时使用具有自动存储持续时间的对象的值”(语言律师注意:附件是提供信息的,并且我一直无法将这种说法追溯到标准的规范部分,至少对于C11而言。 EVA插件由Impact分析内部使用,它将自身限制为根据标准具有明确定义的执行路径(众所周知nasal demons不是EVA的抽象域的一部分)。如果没有这样的路径,抽象执行确实会停止。处理此问题的适当方法是确保在访问之前正确初始化所分析程序的局部变量。

<强>更新

我忘了在下一个版本(16 - Sulphur)中提及,其beta版本可在https://github.com/Frama-C/Frama-C-snapshot/wiki/downloads/frama-c-Sulfur-20171101-beta.tar.gz获得,EVA有一个选项-val-initialized-locals,其帮助指定:

  

局部变量在范围内完全初始化。仅用于分析程序错误w.r.t.初始化。