对于带有符号参数的循环,我有一个关于 KLEE(符号执行工具)如何工作的问题:
int loop(int data) {
int i, result=0;
for (i=0;i<data ;i++){
result+= 1;
//printf("result%d\n", result); //-- With this line klee give different values for data
}
return result;
}
void main() {
int n;
klee_make_symbolic(&n, sizeof(int),"n");
int result=loop(n) ;
}
如果我们用这段代码执行 klee,它只会给出一个测试用例。但是,如果我们去掉 printf(...) 的注释,klee 将需要某种类型的控制来停止执行,因为它会产生 n 的值:--max-depth= 200
我想了解为什么 klee 有这种不同的行为,这对我来说没有意义。为什么如果我在这段代码中没有 printf,它不会产生相同的值。
我发现它发生在选项时发生 - 当它没有相同的行为时,使用时式。有人知道 Klee 的 --optimize 是如何工作的吗?
另一个同样的问题是,如果在他们发表的论文中,据我所知,他们说他们的启发式搜索将使它不是无限的(他们使用避免饥饿),因为我让它运行不会停止,这是真的在这个循环的情况下应该完成 klee 执行?
提前致谢