2013-06-25 7 views
1

임의의 실행 파일이 주어지면 간접 분기 대상 주소의 일부 또는 전부를 결정할 수 있습니까? 이러한 대상을 계산하기위한 프로그래밍 방식은 무엇입니까? 저는 실행 파일에서 CFG를 재구성하고 있기 때문에 간접 브랜치를 계산하는 깨끗한 방법을 찾을 수 없기 때문에 묻습니다. 때로 피연산자는 법의학적인 분석을 통해 결정될 수 있지만 다른 경우에는 명확하지 않습니다.간접 점프 대상 계산

+0

당신은 분해를 통해 발견되지 않는 목적지에 대해 이야기하고 있습니까? 기본적으로 명령어 세트 시뮬레이터를 사용합니다. 아니면 단순히 분석. 이들 중 일부는 (모든 실제 코드 경로를 시뮬레이션하지 않고) 완전히 해결할 수 없습니다. –

+0

정적 분석만으로 수행 할 수 있습니까? – RouteMapper

답변

2

컴파일 된 프로그램에서 가능한 간접 분기 대상을 정적으로 계산하는 경우 주소에 가능한 값을 찾기 위해 data-flow analysis을 수행하여을 수행하여 가능합니다.

jump tables과 같은 간단한 것들 (switch 문에서 종종 생성되는 것들)에서 잘 작동 할 수도 있습니다.

일반적인 경우에는 괜찮은 결과를 얻으려면 꽤 어려울 것입니다. 특히 분석에 힙 분석이 필요합니다. 그 이유는 무엇입니까? 특히로드 및 저장소가 메모리에 가득 차있을 수있는 어셈블리에서 특히 쉽지 않습니다.