KLEE如何计算分支的数量

KLEE如何计算分支的数量,klee,Klee,我正在使用Klee2.9,并试图从Klee Generates统计文件中获取分支信息。我输入了一个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(&a

我正在使用Klee2.9,并试图从Klee Generates统计文件中获取分支信息。我输入了一个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;
}
#包括
#包括
int main(){
INTA;
int b;
klee_make_symbolic(&a,尺寸为(a),“a”);
klee_make_符号(&b,尺寸(b),“b”);
如果(a/b==1){
printf(“a==b\n”);
}
否则{
printf(“a!=b\n”);
}
返回0;
}
和文件output run.stats,如下所示, ('Instructions'、'FullBranchs'、'PartialBranches'、'NumBranches'、'UserTime'、'NumStates'、'MallocUsage'、'NumQueries'、'NumQueryConstructs'、'NumObjects'、'WallTime'、'CoveredInstructions'、'UncoveredInstructions'、'QueryTime'、'SolverTime'、'CexCacheTime'、'ForkTime'、'ResolveTime',)

(0,0,0,8,5.609000e-03,0528704,0,0,4.196167e-05,0,78,0.000000e+00,0.000000e+00,0.000000e+00,0.000000e+00,0.000000e+00,0.000000e+00)

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

谁能解释一下8是怎么来的吗?

两个可能的原因:

“klee_make_symbol”和“printf”包含条件语句。当KLEE执行程序时,它不会将您的函数与外部函数区分开来

如果使用“-libc=uclibc”运行KLEE,则主函数将替换为“\uuuuuclibc\umain”。“\uuuulibc\umain”首先进行一些初始化工作,然后调用原始的“main”函数。初始化可能包含一些条件语句

您需要检查KLEE的版本和使用的命令