글
어셈블리 ( 스택 프레임)
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 |