정보보안

어셈블리 (함수)

swzz 2020. 1. 12. 06:47

@ 어셈블리(함수)

1. 함수

 - 특정 기능을 수행할 수 있도록 코드들이 모여있는 일종의 작은 프로그램 단위를 의미한다.
 - 함수 처리 과정 : 함수 호출 -> 함수 시작(프롤로그) -> 함수 본체 -> 함수 종료(에필로그)
 - 함수가 호출되기 이전에 인자값들이 스택에 PUSH가 되고, 리턴주소를 저장한 다음에 함수가 시작된다.
 - 함수 처리가 완료되면 결과값(리턴값)을 EAX 레지스터에 저장하여 리턴하고 함수를 종료한다.
 - 함수 구문은 다음과 같다.

반환값 함수명(인자, 인자...)
{
코드들....
}

2. 함수 이해

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

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

#include 

int func(int num1, int num2)
{
return num1+num2;
}

int main()
{
func(6, 2);
return 0;
}


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


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

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

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

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

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


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

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