使用 Frama-C 的影响分析时如何避免检测到未初始化的变量
How to avoid detecting uninitialized variables when using the impact analysis of Frama-C
我发现如果程序中存在未初始化的左值(例如变量 X),Frama-C 断言 X 已被初始化,但断言最终状态无效。 Frama-C 似乎在检测到最终状态无效后停止了分析,因此影响分析的实际结果(受影响的语句)只是理想结果的一部分。我希望 Frama-C 进行影响分析而不管那些未初始化的变量,但我还没有找到任何相关的选项。如何处理这个问题?
您正在调用 ISO C 标准附件 J.2 中指示的未定义行为 "The value of an object with automatic storage duration is used while it is indeterminate"(语言律师注意:所述附件提供了信息,我无法追溯该声明到标准的规范部分,至少对于 C11)。影响分析在内部使用的 EVA 插件将自身限制为根据标准具有明确定义含义的执行路径(众所周知的 nasal demons 不是 EVA 抽象域的一部分)。如果没有这样的路径,抽象执行确实会停止。处理这个问题的适当方法是确保被分析程序的局部变量在被访问之前被正确初始化。
更新
我忘了说下一个版本(16 - Sulfur),其测试版在 https://github.com/Frama-C/Frama-C-snapshot/wiki/downloads/frama-c-Sulfur-20171101-beta.tar.gz 可用,EVA 有一个选项 -val-initialized-locals
,其帮助指定:
Local variables enter in scope fully initialized. Only useful for the analysis of programs buggy w.r.t. initialization.
我发现如果程序中存在未初始化的左值(例如变量 X),Frama-C 断言 X 已被初始化,但断言最终状态无效。 Frama-C 似乎在检测到最终状态无效后停止了分析,因此影响分析的实际结果(受影响的语句)只是理想结果的一部分。我希望 Frama-C 进行影响分析而不管那些未初始化的变量,但我还没有找到任何相关的选项。如何处理这个问题?
您正在调用 ISO C 标准附件 J.2 中指示的未定义行为 "The value of an object with automatic storage duration is used while it is indeterminate"(语言律师注意:所述附件提供了信息,我无法追溯该声明到标准的规范部分,至少对于 C11)。影响分析在内部使用的 EVA 插件将自身限制为根据标准具有明确定义含义的执行路径(众所周知的 nasal demons 不是 EVA 抽象域的一部分)。如果没有这样的路径,抽象执行确实会停止。处理这个问题的适当方法是确保被分析程序的局部变量在被访问之前被正确初始化。
更新
我忘了说下一个版本(16 - Sulfur),其测试版在 https://github.com/Frama-C/Frama-C-snapshot/wiki/downloads/frama-c-Sulfur-20171101-beta.tar.gz 可用,EVA 有一个选项 -val-initialized-locals
,其帮助指定:
Local variables enter in scope fully initialized. Only useful for the analysis of programs buggy w.r.t. initialization.