어떻게 상징적 인 매개 변수를 사용하여 루프의 경우 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) ;
}
것은,이 줄을 단 하나의 테스트 케이스. 그러나 printf (...)의 주석을 제거하면 n에 대한 값을 생성하기 때문에 실행을 중지하는 데 필요한 유형의 컨트롤이 필요합니다. --max-depth = 200
클레어에게 왜 다른 행동이 필요한지 이해하고 싶습니다. 그것은 저에게 감각이 없습니다. 이 코드에 printf가 없으면 동일한 값을 생성하지 않습니다.
동일한 동작이없는 경우 --optimize 옵션이 사용 된 경우 이 발견되었습니다. 누가 Klee의 최적화 된 작업을하는지 알아?
다른 퀴스톤은 그들이 발행 한 논문에있는 경우, 그들이 발견 한 바에 따르면 휴리스틱 서치로 무한하지 않을 것입니다. (굶주림을 피합니다) 왜냐하면 나는 달리기를하지 않기 때문입니다. 이 루프의 경우에는 klee 실행을 완료해야합니다. 사전에
덕분에
소스를 LLVM으로 컴파일하는 방법은 무엇입니까? clang 또는 gcc 프런트 엔드를 사용합니까? –
llvm-gcc -g -v --emit-llvm -c loop.c 그런 다음 : klee --allow - external - sym - calls --optimize loop.o. 하지만 --optimize를 꺼내면 루프가 항상 똑같이됩니다. printf를 사용하거나 사용하지 않으면 무한 실행이됩니다. 내가 알고 싶은 것은 왜 --optimize 옵션을 가진이 다른 행동인가. 감사 – user1753101