4

不幸的是,我什至不确定如何调用这种静态分析。这不是真正的控制流分析,因为我不是在寻找函数调用,也不需要数据流分析,因为我不关心实际值。

我只需要一个工具来列出对特定变量进行写访问的位置(文件、函数)。我什至不在乎该列表是否包含无法访问的行。我可以想象编写一个简单的解析器就足以完成这项任务,但我确信肯定有一个工具可以进行这种简单的分析。

作为一个穷学生,我会很感激免费或更好的开源工具,如果有人能告诉我这种类型的静态分析实际上是如何被调用的,我将同样感激!

编辑:我忘了提到代码库中没有指针算法。

4

3 回答 3

4

为什么不创建变量const,然后记下编译器禁止写访问的所有错误?

注意:这不会捕获变量底层内存以某种错误方式写入的错误,例如缓冲区溢出。

编辑:例如:

const int a = 1;
a = 2;
a = 3;

我的编译器产生:

1>MyProg.c(46): error C3892: 'a' : you cannot assign to a variable that is const
1>MyProg.c(47): error C3892: 'a' : you cannot assign to a variable that is const
于 2012-11-09T10:40:25.137 回答
1

你的意思是这样的吗?

在此处输入图像描述

这适用于您努力使用Frama-C 的价值分析进行分析的 C 程序。它是开源的,依赖信息也可以通过编程方式获得。随着静态分析仪的发展,它处于频谱的“精确”一侧。如果您的目标是嵌入式 C 代码,它会更好地工作。

于 2012-11-09T10:49:01.333 回答
0

我不确定是否可以编写这样的工具。指针可用于更改内存中的任意数据,而无需引用指向该数据的其他变量。想想像这样的函数memset(),它会改变整个内存块。

如果您对这些类型的突变不感兴趣,您仍然必须考虑传递指针。在 C 中,您可以有任意数量的指针指向相同的数据,并且您必须分析这些指针的副本是在哪里制作的。然后可以再次复制这些副本,...

因此,即使在“简单”的情况下,也需要进行大量的代码分析。

于 2012-11-09T10:37:12.597 回答