PE : Program Execute 의 약자, 파일을 실행할 수 있도록 도와주고 프로그램을 열어보았을 때 확인 할 수 있다.
PE파일의 종류
종류 |
확장자 |
종류 |
확장자 |
실행 |
EXE, SCR |
드라이버 |
SYS, VXD |
라이브러리 |
DLL, OCX,CPI 등 |
오브젝트 |
OBJ |
HxD로 열어본 메모장
이렇게 보면 아무것도 모르니 일단 기본 구조를 살펴보죠.
기본 구조
- PE 구조
DOS HEADER
DOS STUB
.text Section Header
.data Section Header
.rsrc Section Header
### NULL PADDING ###
.text Section Body
### NULL PADDING ###
.data Section Body
### NULL PADDING ###
.rsrc Section Body
### NULL PADDING ###
이렇게 많은 Header 들과 Body들로 이루어져있는데, 하나하나 설명해볼께요.
Dos Header
- 총 40Byte
- 구조체 형태로 값을 가진다.
Dos Header :: Dos Header Structure
typedef struct _IMAGE_DOS_HEADER { WORD e_magic; //Dos 시그니처 WORD e_chip; WORD e_up; WORD e_crlc; WORD e_cparhdr; ... LONG e_lfanew; //NT 헤더로 가기 위해 offset } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; |
Dos Header 에서는 위에서 보셨듯이 Dos signiture 가 있습니다.(* EXE파일에서 MZ라는 값을 가지죠.)
또 NT Header로 가기위해 오프셋값을 저장해놓는데, 그 오프셋쪽을 가시면 EXE파일과 DLL파일이 각각 50 45라는 16진수 값을 가지고 있을 것이고, 이건 아스키코드로 변경하면 PE라는 값이 됩니다.
'공부' 카테고리의 다른 글
[C++] Template (0) | 2015.01.02 |
---|---|
VA & RVA (절대주소, 상대주소) (0) | 2015.01.02 |
MIPS 명령어 (0) | 2014.11.21 |
새로 알게 된것 (0) | 2014.11.02 |
RTL(Return To Libc) (0) | 2014.11.02 |