특정 코드를 실행하는 동안 프로그램 카운터가 취하는 값의 시퀀스가 있습니다. 이를 사용하여이 실행 파일을 생성 한 원본 코드에 대한 정적 분석을하고 싶습니다 (원래 코드는 사용할 수 없음) - 특히 몇 개의 루프가 있고 어떻게 중첩되어 있는지. 예를 제공하기 위해,이 경우프로그램 카운터 (명령 포인터) 값의 패턴을 사용하여 루프를 감지합니다.
A: for()
B: if()
C: ...
D: else
E: ...
F: for() {
G: ...
H: ...
I: }
, 프로그램 카운터 순서는 다음과 같을 수 있습니다 ABCDF {GHIGHIGHI} abdef와 {GHIGHI} abdef와 내가 얻을 수있는 방법 {GHIGHIGHIGHI} 위의 순서에서
, 아이디어 두 개의 루프가 있고 하나는 다른 루프 안에 중첩되어 있습니까? 적절한 구문 분석 기술을 사용하는 포인터 만 있으면 도움이 될 것입니다.
원본 코드에서 goto가없고 컴파일러에 최적화 된 루프 언 롤링과 같은 간단한 가정이있을 수 있습니다.
원본 코드를 분석하고 포함 된 루프를 감지하는 이유는 무엇입니까 (표준 제어 흐름 분석 알고리즘 사용)? PC 값은 무엇을 제공합니까 (특정 점이 실제로 코드인지를 제외하고)? [말도 안되는 곳으로 의도적으로 실행되지 않는 점프가있는 난독 화 코드에서 유용 할 수 있습니다] –
... 내 반응은 여러분이 소스 코드를 가지고 있다고 주장한다는 사실에서 비롯된 것이며, 이는 매우 우수한 품질의 정보원입니다. 당신은 그 같은 정보에 대해 다른 곳을 찾고있는 것 같습니다. –
@IraBaxter 원본 소스 코드를 사용할 수 없다는 점을 명확히하기 위해 질문을 편집했습니다. 혼란을 드려 죄송합니다. – sundar