배열을 선언하고 그 안에 문자를 넣는 코드와
int형 변수 두개를 선언하여 출력하는 코드를 만든 뒤 릴리즈로 컴파일을 하자.
늘 하던대로 메인함수를 찾아서 F7을 눌러 들어간다.
스택프레임을 만드는 PUSH와 MOV가 등장했다.
ESP=EBP로 맞추어 놓았다가
ESP에 0x34를 빼주는데 이것은 스택에 0x34만큼 공간을 만들어준 것이다.
ESP와 EBP사이에 0x34의 공간이 생긴것을 볼 수 있다.
34는 10진수로 52이다.
밑에 이 명령어들은 변수들의 초기값을 지정해주는 명령어라 생각할 수 있다.
처음에 공간을 할당하고 EBP를 기준으로 주소를 빼면서 저장하는 것을 알 수 있따.
MOV EAX,DWORD PRT DS:[4020F4]
는 데이터 영역의 4020F4주소의 값 8바이트를 EAX에 MOV하라는 것이다.
그럼 4020F4에 내용에 뭐가있는지 직접 가본다.
이미 아스키코드로 데이터가 들어가 있다.
DWORD는 4바이트이므로 69 20 61 6D인 i am이 들어간다.
그값이 EAX레지스터에 MOV 된다.
MOV DWORD PTR SS:[EBP-20],EAX는
스택영역의 EBP-20(스택 마지막 부분에서 -20을 뺀 주소값)에 아까 가져온 i am을 넣어주는 명령어이다.
EAX에는 아까 가져온 데이터가 저장되어 있다.
이처럼 i am boy you are a girl! 을 다 가져와 스택에 넣으면 스택구조는 이처럼 변한다.
EDX의 반은 DX이고 DX의 반은 DL 이다
위에 나오는 DX는 EDX의 반의 영역이고
AL은 EAX의 반의 반 영역이다.
위를 보면 13,12를 해당 스택 주소값에 넣는 명령어가 나오는데 이것은 처음 코드에서 선언한 INT형 변수에
19와 18를 넣어주는 명령어이다. 이 처럼 기계어에는 변수이름이 들어가지 않고 주소로 판단한다. 19와 18은 16진수로
각각 13,12이다.
\
'리버싱<기초>' 카테고리의 다른 글
[Reversing]조건문과 플래그 (0) | 2018.04.20 |
---|---|
[Reversing]기초 리버싱 프로그램 리버싱해보기 (2) | 2018.04.18 |
[Reversing]변수호출 리버싱 구조 (0) | 2018.04.18 |
[Reversing]기본설정과 간단한 Hello World 분석/ 조작 (0) | 2018.04.17 |