함수 호출 규약 calling convention
함수를 호출할 때 매개변수(파라미터)를 어떤 식으로 전달하는가? 에 대한 일종의 약속
- caller: 함수를 호출한 코드
- callee: 함수 호출 당한 코드
함수 호출 규약을 크게 3가지로 분류
- cdecl
- C언어에서 사용하는 방식. caller는 매개변수를 오른쪽에서 왼쪽으로 스택에 push. Caller가 함수 호출 후 스택 정리.
- stdcall
- caller는 매개변수를 오른쪽에서 왼쪽으로 스택에 push. Callee가 스택을 정리. Window32 API에서 사용됨.
- fastcall
- caller는 처음 몇 개의 매개변수는 레지스터에 저장해서 함수에 저장하고 나머지 매개변수는 오른쪽에서 왼쪽 순서로 스택에 저장하여 전달. callee가 스택 정리. x64매개변수 4개이고 최대 두개까지 ECX, EDX, RDX, RCX로 이용.
PE file format
PE: Portable Executable, Windows 운영체제에서 실행 가능한 파일
PE 32bit 용어: PE file 32bit
64bit PE는 PE+, PE32+라고 함
PE file 종류
실행 계열: .exe, .scr
드라이브 계열: .sys, .vxd
library 계열: .dll, .ocx, .cpl, .drv
Object 계열: .obj → 실행 불가능
PE file Header 헤더 부분에는 수많은 정보가 있고 구조체 형태
DOS Header
PE header → DOS header, DOS stub, NT header, Section header(.text, .data, .rsrc)
주소체계 - VS & RVA
VA: Virtual Address, 절대주소(고유 경로)
RVA: Relative Virtual Address, 상대주소(현재 위치_imagebase_를 기준으로 파일의 상대적인 경로를 입력하는 방식)
RVA + Imagebase = VA
어떤 PE 파일이 메모리에 로드되어야 하는데 특정 위치에 가보니 다른 파일이 있다. → 다른 빈 공간을 찾아야 함 = 재배치 relocation
PE파일은 대부분 상대주소. 재배치가 발생했을 때 쉽게 위치를 옮길 수 있기 때문
DOS Header
DOS Header파일이 없으면 프로그램이 실행되지 않음
MS-DOS: Microsoft가 만든 최초의 운영체제
DOS의 헤더의 구조체: IMAGE_DOS_HEADER. 윈도우의 모든 프로그램 맨 앞에 있음.
WORD e_magic: DOS Signature (ASCII 코드 값으로 MZ(4D 5A)를 나타냄)
DWORD e_Ifanew: NT header 오프셋 표시
DOS Stub
DOS Stub은 Header와 달리 옵션
MS-DOS에서만 실행되는 코드. Windows OS에서는 실행 X
이 특성을 잘 이용한다면 윈도우와 도스 두 개 모두 실행 가능한 파일을 만들 수 있다
'reversing' 카테고리의 다른 글
RVA TO RAW, IAT (0) | 2025.02.12 |
---|---|
NT header, Section header (0) | 2025.02.12 |
레지스터, 프로세스 메모리 구조, 섹션, 스택, 힙 (0) | 2024.10.27 |
악성코드 종류와 분석 (1) | 2024.10.19 |
static vs. dynamic analysis (0) | 2024.10.13 |