gpt4 book ai didi

c - 使用 Frama-C 进行值(value)依赖分析

转载 作者:太空宇宙 更新时间:2023-11-04 03:36:49 62 4
gpt4 key购买 nike

在以下程序的最后,变量x 的值取决于变量集{x,y,z,c}。同样,变量 y 的值取决于变量集 {y,c}

int main(){
int x = 100;
int y = 50;
int z = 20;
int c = g();

if (c){
x += y + 1;
}else{
x += z + 1;
y = y + 1;
}

return 0;
}

我可以从命令行的 Frama-c 工具中获取此信息吗?如果是,如果有人可以帮助我,我将不胜感激。

最佳答案

您无法从您提供的 main 函数上的 Frama-C 现有插件之一获得此结果。但是,如果您稍微修改一下代码,插件 From 将准确返回您想要的信息。

// test.c
int x = 100;
int y = 50;
int z = 20;

extern int c; // unknown value

int main(){

if (c){
x += y + 1;
}else{
x += z + 1;
y = y + 1;
}

return 0;
}

frama-c -deps test.c

[from] Done for function main
[from] ====== DEPENDENCIES COMPUTED ======
These dependencies hold at termination for the executions that terminate:
[from] Function main:
x FROM x; y; z; c
y FROM y; c (and SELF)
\result FROM \nothing
[from] ====== END OF DEPENDENCIES ======

x 的结果是不言自明的。对于 y,您会得到额外的信息,即 y 自函数开始以来可能未更改,因此 (和 SELF)

通过从 main 初始化变量得到不同结果的原因是 -deps 分析计算其结果 w.r.t.函数开始时的状态。在您的 main 中,由于 xyz 设置为常量值,因此它们的最终结果仅取决于c,这反过来仅取决于 g 读取的内容以计算其结果。

关于c - 使用 Frama-C 进行值(value)依赖分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32016075/

62 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com