1. Windows PE_개요
64k 보호 |
STACK |
HEAP |
|
PE header |
.text |
.data |
.rdate |
.idata |
.didat |
.reloc |
.rsc |
.tls, .debug ... |
|
DLL 및 .edata |
|
64k 보호 |
상위 2G 커널 영역
|
[PE header]
IMAGE_DOS_HEAD |
64 byte |
DOS stub |
가변 |
PE Signature |
가변 (248±) |
IMAGE_FILE_HEADER | |
IMAGE_OPTIONAL_HEADER | |
DataDirectory Array | |
IMAGE_SECTION_HEADER[0] ... IMAGE_SECTION_HEADER[4] |
40 byte *섹션수 |
- PE ( Potable Executable )
Win32 운영체제가 탑재 된 플렛폼이라면 어디에서라도 실행되는 EXE, DLL.
- RVA ( Relative Virtual Address, 상대적 가상 주소 )
이미지가 메모리에 로드 되었을 때, 그 시작주소(ImageBase)와의 거리.
NT의 경우 보통 0x04000000 번지부터 시작 됨.
(RVA가 0x00001234라면 메모리 상의 주소는 보통 0x04001234가 된다.)
- Section
가상주소공간에 로드된 뒤 실제 내용을 담고 있는 블록.
* 모든 정의는 WinNT.h
[section header]
코드 |
.text |
프로그램을 실행하기 위한 코드 |
데이터 |
.data |
초기화 된 전역변수들을 담고 있는 Read, Write 가능한 섹션 |
.rdata |
문자열 표현이나 C++/COM 가상함수 테이블 등 읽기전용 섹션 | |
.bss |
초기화 되지 않은 전역변수. VC7.0에서는 .textbss 매핑시 .data에 병합. | |
임포트 API정보 |
.idata |
임포트 할 DLL과 API등에 대한 정보(IAT등), .rdata에 병합. |
.didat |
지연로딩 임포트 데이터 | |
익스포트 API 정보 |
.edata |
익스포트 할 API에 대한 정보, EXPORT 가능한 DLL, PE에만 존재 .rdata나 .text섹션에 병합되어 보이지 않음. export list file에서 확인 가능하다. |
리소스 |
.rsrc |
다이얼로그, 아이콘, 커서 등 리소스에 관련 된 데이터 |
재배치 정보 |
.reloc |
PE이미지를 원하는 기본주소에 로드하지 못하고 다른 주소에 로드했을 경우 코드 상에서의 관련 주소참조에 대한 정보를 갱신. |
TLS |
.tls |
_declspec(thread) 지시어와 함께 선언되는 스레드 지역 저장소 |
C++런타임 |
.crt |
C++ 런타임을 지원 (생성자, 소멸자, 함수포인터 등) |
short |
.sdata |
전역 포인터에 상대적으로 주소지정 될 수 있는 읽고 쓰기 가능한 short 데이터 섹션 |
|
.srdata |
.sdata에 들어갈 수 있는 데이터들의 읽기전용 섹션 |
예외정보 |
.pdata |
IMAGE_RUNTIME_FUNCTION_ENTRY 구조체 배열을 가짐 x86 계열의 CPU만 테이블에 기본한 예외처리를 지원하지 않음 |
디버깅 |
.debug$S |
OBJ파일에만 존재. 가변길이 코드뷰 포맷 심벌 레코드의 스트림 |
|
.debug$T |
“ |
|
.debug$P |
미리 컴파일 된 헤더를 사용했을 때 OBJ파일에만 존재. |
Directives |
.drectve |
-defaultlib:LIBC 스페이스문자에 의해 구분, #pragma 구문의 경우 링커에게 소스상에서 옵션을 전달. 이 옵션은 OBJ파일 내에 .drectve 섹션에 저장되어 링커가 자신의 옵션으로 인식하여 최종 PE를 실행하게 된다. |
'WINDOWS' 카테고리의 다른 글
윈도우 실행명령 (0) | 2013.07.17 |
---|---|
컴파일러 (0) | 2012.12.24 |
2. Windows PE_Header - Dos Header, File Header (0) | 2012.09.09 |
Windows Script Host (WSH) (0) | 2012.09.07 |
Windows Command (0) | 2012.09.06 |