본문 바로가기

정상을향해/Program Analysis18

PE File Format (2) 출처 : http://www.reversecore.com DOS Header Microsoft는 PE File Format을 만들 때 당시에 널리 사용되던 DOS 파일에 대한 하위 호환성을 고려해서 만들었다. 그 결과로 PE header 의 제일 앞부분에 기존 DOS EXE header 를 확장시킨 IMAGE_DOS_HEADER 구조체가 존재하는 것이다. typedef struct _IMAGE_DOS_HEADER { WORD e_magic; // DOS signature : 4D5A ("MZ") WORD e_cblp; WORD e_cp; WORD e_crlc; WORD e_cparhdr; WORD e_minalloc; WORD e_maxalloc; WORD e_ss; WORD e_sp; WORD e_cs.. 2013. 11. 10.
PE File Format (1) 출처 : http://www.reversecore.com PE(Portable Executable) File Format PE 파일의 종류는 다음과 같다. ∙ 실행 파일 계열 : EXE, SCR ∙ 라이브러리 계열 : DLL, OCX ∙ 드라이버 계열 : SYS ∙ 오브젝트 파일 계열 : OBJ 엄밀히 따지자면 OBJ(오브젝트) 파일을 제외한 모든 파일들은 실행가능한 파일이다. DLL, SYS 파일 등은 쉘(Explorer.exe)에서 직접 실행 할 수는 없지만, 다른 형태의 방법(디버거, 서비스 등)을 이용하여 실행이 가능한 파일들이다. 간단한 설명을 위해 메모장(notepad.exe) 파일을 hex editor를 이용해 열어보자. 위의 그림은 notepad.exe 파일의 시작 부분이며, PE head.. 2013. 11. 10.
Calling Convention 출처 : www.reversecore.com Calling Convention 우리 말로 '함수 호출 규약'이라고 한다. '함수를 호출할 때 파라미터를 어떤 식으로 전달하고, 스택을 어떻게 정리하는가'에 대한 일종의 약속이다. 우린 이미 함수 호출 전에 파라미터가 스택을 통해 전달된다는 것을 알고 있다. 스택은 프로세스에서 정의된 메모리 공간이며 아래 방향(높은 주소에서 낮은 주소로)으로 자란다. 또한 PE header에 그 크기가 명시되어 있다. 즉, 프로세스가 실행될 때 스택 메모리의 크기가 결정된다. (malloc, new와 같은 동적 메모리 할당과는 다르다.) 질문) 그렇다면 함수가 실행 완료 되었을 때 스택에 들어있던 파라미터는 어떻게 해야 할까? 그대로 놔두면 된다. 스택에 저장된 값을 임시로.. 2013. 11. 10.
Stack Frame 출처 : www.reversecore.com Stack 프로세스에서 스택(stack) 메모리의 역할은 아래와 같다. 1. 함수 내의 로컬 변수 임시 저장 2. 함수 호출 시 파라미터 전달 3. 복귀 주소(return address)를 저장 위와 같은 역할을 수행하기에는 스택의 FILO(First In Last Out) 구조가 아주 유용하다. ※ 스택에 대해서 주의할 점! 1. 32/64bit 컴퓨팅 환경에서 스택 크기는 각각 32/64bit (4/8 byte)이다. 2. 스택은 아래로 자란다. (높은 주소에서 낮은 주소로) - 스택에 값을 입력하면 (PUSH 명령) 스택 포인터는 4bytes 만큼 줄어든다. - 스택에서 값을 가져오면 (POP 명령) 스택 포인터는 4bytes 만큼 늘어난다. Stack .. 2013. 11. 10.