KLEE如何计算分支数量



我正在使用Klee 2.9,并试图从统计文件Klee generats中获取分支信息。我输入了一个one-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==bn");
    }
    else {
        printf("a!=bn");   
    }
    return 0;
}

以及如下所示的文件输出run.stats,(‘指令’、‘FullBranches’、‘PartialBranches"、‘NumBranches‘、‘UserTime’、‘NumStates’、‘MallocUsage’、‘NumQueries’、’NumQueryConstructs‘、‘NumObjects’、‘AllTime’、’OveredInstructions‘、’UncoveredInstruction‘、’QueryTime‘、‘SolverTime‘、’ExCacheTime‘、'ForkTime‘、'ResolveTime‘)

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

(32,2,0,8,9.722000e-03,0654176,3,56,0,3.826760e-01,27,51,3.799300e-01,3.802470e-01,38.801040e-01,6.9000000e-05,0.00000e+00)

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

两个可能的原因:

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

如果使用"--libc=uclbc"运行KLEE,主函数将替换为"__uclbc_main"。"__uclac_main"首先做一些初始化工作,然后调用原始的"main"函数。初始化可能包含一些条件语句。

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

相关内容

  • 没有找到相关文章

最新更新