c - 类型检查和代码模式检测,Frama-C

标签 c pattern-matching static-analysis typechecking frama-c

我正在探索 Frama-C 软件,我想知道是否有可能检测到某些代码模式,例如双重 if 测试,或者例如对给定函数的调用总是跟在另一个函数之后。

或者可能使用变量名称,例如检查具有给定前缀名称的变量是否属于特定类型。

您认为使用 Frama-C 有可能吗(使用 ACSL 或通过开发新模块)?

非常感谢 =)

最佳答案

to detect some code pattern such as a doubled if tests

如果您指的是一种模式,其中内部 if 的条件始终为真,因为它是外部 if 的结果,GUI 已经可以向您显示内部 if 的 else 分支已经值分析时发现不可达。

举个简单的例子:

int x, y;

int main(int c){
  if (c == 2)
    {
      x = x * c;
      if (c == 2)
        {
          y = y * c;
        }
      else
        {
          y = y / c;
        }
    }
}

命令行是:

$ frama-c-gui -val t.c

Frama-C GUI showing dead code

这只能试探性地使用。用于冗余测试的声音检测器由执行路径分隔,其中所涉及的变量未被修改,可以利用值分析的结果作为插件实现。

that a call to a given function is always followed by another.

这可以使用 Aoraï ,一个 Frama-C 插件,尽管它的网页声称是这样,但它(已编辑:)包含在 Frama-C 发行版中。 Aoraï 生成与已表达的时间属性相对应的证明义务。证明这些义务可能或多或少很困难。在某种程度上,Aoraï 只是将验证时间属性的问题简化为另一个在 Frama-C 中有插件的问题。

check if a variable with a given prefixed named belongs to a certain type.

这种“编码标准”检查也可以作为 Frama-C 插件来实现。 Atos 实现了一个名为 Taster 的插件验证空客编码规则。

关于c - 类型检查和代码模式检测,Frama-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19003836/

相关文章:

php - 是否有任何 PHP 静态分析器可以检测不存在的类方法调用?

c# - 为什么 NDepend 不产生稳定的 LOC 计数?

c - 关于C中函数参数的静态值

scala - Scala 中的 unapply 方法是什么?

c - 打开文件时出现段错误

java - Ant 路径样式模式

machine-learning - 寻找变体之间的关系

java - 如何在运行时之前验证 RPC 调用的可变参数?

c - 函数的隐式声明和 undefined reference

c - 流与缓冲区