使用 frama-c 切片
Slicing using frama-c
我正在使用 frama-c 来做一些关于程序切片的实验。该工具很棒,并且有很多不同类型的切片(例如,按结果或按语句)。我正在使用如下程序数据结构:
typedef struct ComplexData {
int x;
int y;
char string_[100];
size_t n;
} ComplexData;
这只是为了理解frama-c如何根据函数产生的结果对程序进行切片的示例。基本上,main 方法调用一个函数,该函数 returns 类型为 ComplexData 的值。 不同执行之间的比较是如何进行的?对结构的每个值都有检查? 喜欢 this?
Frama-C 的选项 -slice-return f
指示切片器保留所有有助于计算 f
的 return 代码的语句。对于您的类型 ComplexData
,这意味着任何字段的内容。任何计算例如y
,或 string_
中的一个字符将被保留。
关于不同执行之间的比较,静态切片器实际上工作方式不同。它们 近似 每个函数的行为,跨越所有可能的执行。 (在 Frama-C 的情况下,这是使用称为 abstract interpretation 的技术完成的。)因此,不需要 比较 两次执行。
我正在使用 frama-c 来做一些关于程序切片的实验。该工具很棒,并且有很多不同类型的切片(例如,按结果或按语句)。我正在使用如下程序数据结构:
typedef struct ComplexData {
int x;
int y;
char string_[100];
size_t n;
} ComplexData;
这只是为了理解frama-c如何根据函数产生的结果对程序进行切片的示例。基本上,main 方法调用一个函数,该函数 returns 类型为 ComplexData 的值。 不同执行之间的比较是如何进行的?对结构的每个值都有检查? 喜欢 this?
Frama-C 的选项 -slice-return f
指示切片器保留所有有助于计算 f
的 return 代码的语句。对于您的类型 ComplexData
,这意味着任何字段的内容。任何计算例如y
,或 string_
中的一个字符将被保留。
关于不同执行之间的比较,静态切片器实际上工作方式不同。它们 近似 每个函数的行为,跨越所有可能的执行。 (在 Frama-C 的情况下,这是使用称为 abstract interpretation 的技术完成的。)因此,不需要 比较 两次执行。