我是Z3的新手并在Google和Google上搜索了我的问题的答案。我没有成功。
这是产生问题的代码:
void test(string str) {
if (str [0] == 'g') {
cout << "\"The first letter g" case"<< endl;
if (str [1] == 'a') cout << "Second letter is 'a'";
else cout << "Second letter is not 'a'";
} else {
cout << "The non-g case" << endl;
if (str [1] == 'b') cout << "Second letter is 'b'";
else cout << "Second letter is not 'b'";
}
}
我需要自动生成输入数据,以便代码一直运行。 是否可以使用z3完成此操作?如果是这样,我该如何使用z3 C / C ++ API执行此操作?
答案 0 :(得分:1)
Z3不是测试用例生成器或模糊器,它是一个定理证明器。但是,Z3用于实现模糊器和测试用例生成器。其中一个是Pex,一个测试.NET的白盒子单元。 Z3还用于Sage x86二进制文件的白盒模糊器。不幸的是,我不知道任何基于Z3的C ++测试用例生成器。
答案 1 :(得分:0)
没有直接回答你的问题,但之前已经使用过SAT / SMT求解器来生成这样的“利用”向量并取得了相当大的成功。例如,查看Brumley的AEG系统:http://security.ece.cmu.edu/aeg/index.html等等。