본문 바로가기

Reverse Engineering

3. 구조체 출력 어셈블리어 코드

3. 구조체 출력 어셈블리어 코드

 

 

 

 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지

 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다.



 

 

#include <stdio.h>

struct ST {
 int sv_1;
 int sv_2;
 int sv_3;
};

int main()
{
 struct ST st;
 st.sv_1 = 1;
 st.sv_2 = 2;
 st.sv_3 = 3;

 printf("%x, %x, %x\n", st.sv_1, st.sv_2, st.sv_3);

 return 0;

}

 

 

구조체를 출력하는 어셈블리어 코드

 

MOV DWORD PTR SS:[EBP-14],1

MOV DWORD PTR SS:[EBP-10],2

MOV DWORD PTR SS:[EBP-C],3

 

[발췌]

C 언어의 int 형은 크기가 4바이트다. 따라서 ST 구조체의 크기는 12바이트가 된다.

어셈블러리어를 보면 아래 표의 스택 메모리와 같이 연속된 12바이트에

차례대로 값이 저장된다.

 

 

 Low Address 

 

 

 

 

 1 

 

 EBP-0x14 

 

 2

 

 EBP-0x10

 

 3

 

 EBP-0xC

 

 

 

 

 

 

 

 

 

 

  <-

 EBP 

 High Address