KLEE如何计算分支数量

时间:2015-06-24 21:49:43

标签: klee

我正在使用Klee 2.9,并尝试从stat文件klee generats获取分支信息。我输入了一个if-else语句程序,klee将NumBranches报告为8。

测试中的代码如下所示,

#include <stdio.h>
#include <stdbool.h>

int main(){
    int a;
    int b;
    klee_make_symbolic(&a,sizeof(a),"a");
    klee_make_symbolic(&b,sizeof(b),"b");
    if (a / b == 1) {
        printf("a==b\n");
    }
    else {
        printf("a!=b\n");   
    }
    return 0;
}

和文件输出run.stats如下所示, (&#39;说明&#39;&#39; FullBranches&#39;&#39; PartialBranches&#39;&#39; NumBranches&#39;&#39; UserTime&#39;,&#39; NumStates&#39;&#39; MallocUsage&#39;&#39; NumQueries&#39;&#39; NumQueryConstructs&#39;&#39; NumObjects&#39;&#39; WallTime&#39 ;, &#39; CoveredInstructions&#39;&#39; UncoveredInstructions&#39;&#39; QueryTime&#39;&#39; SolverTime&#39;&#39; CexCacheTime&#39;&#39; ForkTime& #39;,&#39; ResolveTime&#39;,)

(0,0,0,的 8 下,5.609000e-03,0,528704,0,0,0,4.196167e-05,0,78,0.000000e + 00,0.000000e + 00,0.000000e + 00,0.000000e + 00,0.000000e + 00)

(32,2,0,的 8 下,9.722000e-03,0,654176,3,56,0,3.826760e-01,27,51,3.799300e-01,3.802470e -01,3.801040e-01,6.900000e-05,0.000000e + 00)

任何人都可以解释我8是怎么来的?

1 个答案:

答案 0 :(得分:0)

两个可能的原因:

&#34; klee_make_symbolic&#34;和&#34; printf&#34;包含条件语句。当KLEE执行程序时,它不会将您的功能与外部功能区分开来。

如果您使用&#34; - libc = uclibc&#34;运行KLEE,则主函数将替换为&#34; __ uclibc_main&#34;。 &#34; __ uclibc_main&#34;首先做一些初始化工作,然后调用原来的&#34; main&#34;功能。初始化可能包含一些条件语句。

您需要检查KLEE的版本以及您使用的命令。