Symbolic Execution과 Concrete Execution의 차이를 모르겠습니다.
글쓴이: zinzzalimp / 작성시간: 화, 2010/08/03 - 4:55오후
테스팅 랩에서 연구 및 공부하고있는 예비 대학원생입니다.
이번에 교수님께서 Crest라는 테스팅툴을 분석하라고하셔서
코드를 받아서 이곳저곳 코드 넣어가며 보고있는데요
crest 프로젝트 : http://code.google.com/p/crest/
위 페이지에 링크된 논문, 구글링, 위키를 찾아보면서
Symbolic Execution, Concrete Execution, 두개가 혼합된 Concolic Execution을 공부하고있는데
잘이해가안가서 도움을 청합니다.
Forums:
둘의 차이
concrete execution 은 우리가 일상적으로 프로그램을 실행하는 것입니다. 구체적인 입력값이 있고, 이 입력값을 기반으로 연산을 수행해서 구체적인 출력값을 내 주지요.
symbolic execution 은 입력을 구체적인 값으로 주는 것이 아닌 일종의 기호로 주고 프로그램을 실행하는 것입니다.
int foo(int a){
if (a > 0){
return 1;
else
return 0;
}
과 같은 함수에서 symbolic execution 을 수행하게 되면 a가 심볼릭 입력이고요. foo(a)를 실행한 결과는 (a > 0 && foo(a) == 1) || a <= 0 && foo(a) == 0) 과 같은 심볼릭 수식(symbolic formula)로 나오게 됩니다. 이게 이 formula 를 풀어봄으로써 이 심볼릭 수행과 동일한 실행 경로를 갖는 concrete execution 을 수행할 concrete input 을 구할 수 있지요.
댓글 달기