7. for 리버싱 for문이 포함된 어셈블리어 코드
본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. |
#include <stdio.h>
int main()
{
int lv;
for (lv=0; lv<2; lv++)
printf("% ", lv);
return 0;
}
01241410 CALL ConsoleA 01241136
01241421 JMP SHORT 012413FA
01241423 XOR EAX, EAX
[발췌-수정]
012413EE 주소에서 지역 변수인 lv([EBP-8]에 먼저 0을 할당한다. 01241400 주소에서 CMP 명령어로 2와 먼저
비교해 01241404 주소의 JGE(jump if greater or equal) 명령어에 의해 [EBP-8] 에 할당된 변수가 2보다 크거나 같으면
반복문을 빠져 나간다.
JGE 명령어에 의해 점푸하지 않은 경우 아래로 내려와 01241421 주소의 JMP 명령어에 의해 반복문을 실행하게 된다.
그리고 012413FA 주소에서 [EBP-8]에 1을 더해준다.
for문은 초기화 (Lv=0)를 먼저하고, 조건문 (lv<2)을 검사한다. 그리고 for 문 안의 코드를 실행시키고
연산(lv++)을 하고 다시 조건문 검사를 한다. 이론으로만 알고 있던 내용을 어셈블리어로 보면 명확해진다.
'Reverse Engineering' 카테고리의 다른 글
9. 콜린 컨벤션 __cdecl 함수 어셈블리어 코드 (0) | 2016.11.10 |
---|---|
8. while문이 포함된 어셈블리어 코드 (0) | 2016.11.10 |
6. 6개의 분기가 포함된 어셈블리어 코드 (0) | 2016.11.10 |
5. switch문이 포함된 어셈블리어 코드 (0) | 2016.11.10 |
4. if 리버싱 (if문이 포함된 어셈블리어 코드) (0) | 2016.11.10 |