我想分析一个大型项目中的文件,使用Frama-C创建程序依赖图,但不断出现奇怪的错误,例如:
/usr/include/bits/fcntl-linux.h:305:[kernel]用户错误:数组长度为零。此扩展程序不受支持
如果我尝试使用frama-c提供的libc实现,由于缺少诸如sys / file.h之类的头文件,编译失败。
我正在尝试使用GCC版本4.8.1来分析Lynx项目中的文件,特别是src / WWW / Library / Implementation / HTTP.c中的文件
我真正需要的是能够为这个源文件生成一个PDG(当然它有各种各样的依赖)但是我想如果我可以通过跳过未定义的函数来获得一个有点不完整的图形,那将是一个很好的第一步。
答案 0 :(得分:4)
你需要在一个目录“sys”中提供你自己的“file.h”文件,该目录放在GCC搜索的路径中的任何地方,当预处理Frama-C时。
供参考,以下是sys/file.h on another system的实施。您可能对this other StackOverflow question关于sys / file.h感兴趣。
对于Frama-C的价值分析,与原型一起分配条款还有很长的路要走:
/*@ assigns *f \from ui, s, *fo; */
void finit(struct file *f, u_int ui, short s, void *p, struct fileops *fo);
请注意,我不知道finit()
函数是做什么的,以及上面是否是正确的assigns
子句。实际上,这就是重点:Frama-C开箱即用,并且由于这个低级别,不太便携的系统调用用于您想要分析的代码中,因此有人必须知道。我担心它必须是你。从好的方面来说,您只需提供要分析的代码所使用的类型,宏和函数原型。