어셈블리 ( 스택 프레임)

리버싱 2019. 11. 14. 17:45

1. 스택 프레임

  - 스택 프레임은 EBP 레지스터를 사용하여 스택 내의 지역 변수 , 함수 인자값 , 리턴 주소에 접근하는 기법이다.

  - 스택에는 지역 변수 , 함수 인자값 , 리턴 주소들이 저장된다.

  - 스택 프레임은 함수가 호출될 때 생성되고, 함수 처리가 완료되면 자동으로 소멸이된다.

 

2. 스택 프레임 이해

 

1) 코드 작성

#include  <stdio.h>

int add(int a, int b)
{
int x = a , y = b;
return (x + y);
}

int main(int argc, char* argv[])
{
int a = 6 , b = 2;
printf("%d\n", add(a,b));
return 0;
}

 

2) 'cl' 명령어를 이용한 최적화 컴파일 실시

 

 

 

 

 

 

 

어셈블리 ( 지역변수 & 전역변수 )

 

1. 지역 변수 

  - 해당 함수 내에서 사용하는 변수이며 , 함수 처리가 완료되면 소멸

  - 함수 안에서 지역 변수를 선언하면 스택에 SUB 명령어를 이용하여 공간을 확보한다.

  - 이때 확보되는 공간 사이즈 크기는 자료형 타입과 선언된 지역 변수 개수에 따라서 다르다.

  - 지역 변수는 스택에 저장되기 때문에 올리디버거에서 'SS'로 출력된다.

  - 지역 변수 구문은 다음과 같다

 

int main()

{

   자료형 변수명;

}

 

 

 

2. 전역변수

  - 다른 함수에서도 사용할 수 있는 변수를 의미하며 프로그램이 종료되면 소멸한다

  - 전역 변수는 데이터 영역에 저장되어 있기 때문에 스택에 별도의 공간을 확보하지 않는다.

  - 올리디버거에서는 해당 값들이 저장될 위치 주소 앞에 'DS'로 출력된다.

  - 전역 변수 구문은 다음과 같다.

 

자료형 변수명;

 

int main()

{

    전역 변수명;

}

 


C:\리버싱\04_테스트\stack\stack>cl stack.cpp /link /debug /opt:icf,ref
Microsoft (R) 32비트 C/C++ 최적화 컴파일러 버전 15.00.30729.01(80x86)
Copyright (c) Microsoft Corporation.  All rights reserved.

stack.cpp
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:stack.exe
/debug
/opt:icf,ref
stack.obj

C:\리버싱\04_테스트\stack\stack>

'리버싱' 카테고리의 다른 글

어셈블리 ( 함수 )  (0) 2019.11.15
어셈블리 ( 구조체 )  (0) 2019.11.15
어셈블리 기본 명령어  (0) 2019.11.14
어셈블리(레지스터 이해)  (0) 2019.11.13
화면 잠금 프로그램 'Lock Workstation' 제작  (0) 2019.11.13

설정

트랙백

댓글