Concrete Execution, Symbolic Execution, Abstract Execution의 세 가지 실행 방식은 모두 동적 분석에 해당한다고 보기 어렵습니다. 이들은 각각 다른 실행 방식을 나타내며, 동적 분석과 정적 분석의 경계를 넘나들 수 있습니다.
1. Concrete Execution (구체적 실행)
- 프로그램을 실제 입력값으로 실행하는 방식입니다.
- 프로그램 실행 시 실제 데이터를 사용하여 실행 경로를 탐색하고 결과를 분석합니다.
- 동적 분석의 전형적인 예입니다.
- 예: 프로그램 테스트, 디버깅, 성능 프로파일링.
2. Symbolic Execution (기호적 실행)
- 입력값을 기호(symbol)로 대체하여 프로그램을 실행합니다.
- 프로그램의 실행 경로와 조건을 수학적으로 표현하며, 실행 없이 이론적으로 경로를 탐색할 수 있습니다.
- 동적 분석과 정적 분석의 혼합 방식으로 사용됩니다.
- 실행 중 기호적 조건을 평가하는 경우, 동적 분석 요소를 포함합니다.
- 프로그램을 실행하지 않고 실행 경로를 탐색할 때, 정적 분석의 특성을 가집니다.
- 예: 프로그램 버그 탐색, 취약점 분석.
3. Abstract Execution (추상적 실행)
- 입력값과 프로그램 동작을 추상화하여 실행합니다.
- 모든 가능한 입력값과 경로를 추상적으로 모델링하여 실행합니다.
- 일반적으로 정적 분석에 속합니다.
- 프로그램을 실행하지 않고, 추상적인 의미만을 분석합니다.
- 예: 데이터 흐름 분석, 정적 프로그램 검증.
결론