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

2020. 1. 11. 02:41정보보안

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


1. 지역 변수
 
 - 해당 함수 내에서 사용하는 변수이며, 함수 처리가 완료되면 소멸된다.
 - 함수 안에서 지역 변수를 선언하면, 스택에 SUB 명령어를 이용하여 공간을 확보한다.
 - 이때, 확보되는 공간 크기는 자료형 타입과 선언된 지역 변수 개수에 따라서 다르다.
 - 지역 변수는 스택에 저장되기 때문에 올리디버거에서 'SS'로 출력된다.
 - 지역 변수 구문은 다음과 같다.

int main()
{
자료형 변수명;
}


2. 지역 변수 이해

 1) VS 2008을 이용하여 'lv.exe' 파일을 제작한다.

 - 파일 -> 새로 만들기 -> 프로젝트 -> 빈 프로젝트 -> 위치(04_테스트) & 이름(lv) -> 확인
 - '소스 파일' 우클릭 -> 추가 -> 새 항목 -> 'C++ 파일(.cpp)' 선택 -> 이름(lv) -> 추가

#include 

int main()
{
int num1 = 6;
int num2 = 2;
return 0;
}

 - 파일 -> 모두 저장 -> 닫기


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

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

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

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

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


3. 올리디버거를 이용한 'lv.exe' 분석

 - 메모리 주소, 레지스터 저장 값, 스택 내용, 메모리 덤프 내용 확인

 1) main 함수 찾기(F8)
 2) main 함수로 들어가기(F7)
 3) main 함수에 BP 걸기(F2)
 4) main 함수 프롤로그 확인(F8)
 5) main 함수 본체 확인(F8)
 6) SUB를 이용한 지역 변수를 위한 공간 확보 내용 확인(F8)
 7) MOV를 이용한 지역 변수값 스택에 대입하는 내용 확인(F8)
 8) main 함수 에필로그 확인(F8)
-----------------------------------------------------------------------------------------
@ 전역 변수

1. 전역 변수

 - 다른 함수에서도 사용할 수 있는 변수를 의미하며 프로그램이 종료되면 소멸된다.
 - 전역 변수는 데이터 영역에 저장되어 있기 때문에 스택에 별도의 공간을 확보하지 않는다.
 - 올리디버거에서는 해당 값들이 저장될 위치 주소 앞에 'DS'로 출력된다.
 - 전역 변수 구문는 다음과 같다.

자료형 변수명;

int main()
{
전역 변수명;
}


2. 전역 변수 이해

 1) VS 2008을 이용하여 'gv.exe' 파일을 제작한다.

 - 파일 -> 새로 만들기 -> 프로젝트 -> 빈 프로젝트 -> 위치(04_테스트) & 이름(gv) -> 확인
 - '소스 파일' 우클릭 -> 추가 -> 새 항목 -> 'C++ 파일(.cpp)' 선택 -> 이름(gv) -> 추가

#include 

int num1;
int num2;

int main()
{
num1 = 6;
num2 = 2;
return 0;
}

 - 파일 -> 모두 저장 -> 닫기

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

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

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

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

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

3. 올리디버거를 이용한 'gv.exe' 분석

 - 메모리 주소, 레지스터 저장 값, 스택 내용, 메모리 덤프 내용 확인
 - 'SUB'를 이용한 공간 확보 명령이 없음


'정보보안' 카테고리의 다른 글

어셈블리 (함수)  (0) 2020.01.12
어셈블리(구조체)  (0) 2020.01.12
어셈블리(스택 프레임)  (0) 2020.01.11
어셈블리(레지스터 이해)  (0) 2020.01.11
pe 파일 분석(API & DLL)  (0) 2020.01.11