Reversing/PE File Format2012. 10. 29. 12:54

PE File Format 0x02



0x01. Dos Header


Windows에서 제공하는 winNT.h의 _IMAGE_DOS_HEADER 구조체입니다.


Dos 시절의 파일과의 호환성을 고려해서 만들었습니다.

IMAGE_DOS_HEADER 구조체의 크기는 0x40 입니다.

각각의 역할은 주석으로 설명되어 있습니다.

중요한 부분은 e_magice_lfanew입니다.


e_magic /* Dos signature입니다.

ASCII 값으로 "MZ"(4D 5A) 입니다.

모든 PE 파일은 시작 부분에 Dos signature("MZ")가 존재합니다.

MZ는 Dos 실행 파일을 설계한 Mark Zbikowski의 이니셜입니다. */

e_lfanew /* Long File Address of NEW exe header를 줄인 말입니다.

 앞의 Long은 자료형 DWORD를 의미합니다.

 NT header의 offset을 저장하고 있습니다.

 모든 PE 파일은 e_lfanew가 가리키는 위치에 NT header 구조체가 존재합니다. */


실행파일을 PEview로 열어본 모습입니다.

위쪽의 파란 줄의 상자는 Dos header를 나타내고

아래쪽의 파란 줄의 상자는 NT header를 나타냅니다.

시작 부분에 "MZ"가 있는 것을 확인할 수 있습니다.

Dos header의 마지막 DWORD는 00 01 00 00 으로 little endian을 적용해 0x00000100을 가리키고 있습니다.

해당 주소를 따라가면 NT header가 나오는 것을 확인할 수 있습니다.


Little endian의 개념을 모르시면 다음 글을 읽고 오세요.

 -> http://slimv.tistory.com/entry/Little-endian


0x02. Dos Stub


Dos header의 바로 다음에는 Dos stub가 있습니다.

Dos stub는 있는 경우도 있고 없는 경우도 있습니다.

Dos stub는 Dos mode로 실행한 경우 실행되는 코드입니다.

16-bit assembly code와 data의 혼합으로 이루어져 있습니다.


파란 줄의 상자 속의 코드가 Dos stub 입니다.

Dos header가 끝난 바로 다음에 위치하는 것을 확인할 수 있습니다.

일반적으로는 "This program cannot be run in DOS mode"

또는 "This program must be run under Win32"과 같은 메시지를 출력하고 종료합니다.


'Reversing > PE File Format' 카테고리의 다른 글

PE File Format 0x06  (0) 2012.11.11
PE File Format 0x05  (0) 2012.11.07
PE File Format 0x04  (0) 2012.10.31
PE File Format 0x03  (0) 2012.10.29
PE File Format 0x01  (1) 2012.10.28
Posted by slimV
Reversing/PE File Format2012. 10. 28. 22:11

PE File Format 0x01



PE(Portable Excutable) 파일은 Windows OS에서 사용되는 실행 파일 형식입니다.

PE 파일들은 PE header로 시작하며

PE header에는 파일이 실행되기 위해 필요한 모든 정보가 구조체 형식으로 들어있습니다.


0x01. PE 파일의 종류


종류

확장자

 실행 계열

 EXE, SCR

 라이브러리 계열

 DLL, OCX, CPL, DRV

 드라이버 계열

 SYS, VXD

 오브젝트 파일 계열

 OBJ


0x02. PE 파일 구조


Disk 상에 저장되어 있는 PE 파일과 memory에 mapping된 PE 파일의 구조입니다.


Dos header부터 section header까지를 PE header라고 부릅니다.

PE header 밑에 있는 section들을 PE body라고 부릅니다.

각 그림의 양쪽에는 disk 상과 memory 상에서의 주소를 표현하고 있습니다.

Disk 상에서는 offset, memory 상에서는 VA(Virtual Address)로 주소를 표현합니다.


파일이 memory에 mapping 되면 disk 상에서의 모습에 비해 section의 크기, 위치 등이 조금 달라집니다.

Section은 일반적으로 용도별로 코드 영역(.text), 데이터 영역(.data), 리소스 영역(.rsrc)으로 나뉩니다.

Section의 이름, 크기, 개수 등은 개발 도구나 compile 설정에 따라 달라집니다.

Section header에는 각 section에 대한 크기, 위치, 속성 등이 저장되어 있습니다.


실행파일을 PEview로 열어 눈으로 직접 확인해 보겠습니다.


파란 줄의 상자 속이 Dos header 입니다.

Dos signature인 "MZ"로 시작하는 것을 확인할 수 있습니다.


파란 줄의 상자 속이 NT header 입니다.

PE signature인 "PE.."으로 시작하는 것을 확인할 수 있습니다.


파란 줄의 상자 속이 Section header 입니다.

각 section들의 이름이 string으로 저장되어 있는 것을 확인할 수 있습니다.

위 그림에서는 CODE, DATA, .idata, .reloc, .rsrc 총 5개의 section이 있습니다.


'Reversing > PE File Format' 카테고리의 다른 글

PE File Format 0x06  (0) 2012.11.11
PE File Format 0x05  (0) 2012.11.07
PE File Format 0x04  (0) 2012.10.31
PE File Format 0x03  (0) 2012.10.29
PE File Format 0x02  (0) 2012.10.29
Posted by slimV
Note2012. 10. 19. 01:13

IE(Internet Explorer) Single Process 설정



IE8부터는 frame과 tab의 process를 분리하여 관리하는 multi process 기술을 사용합니다.

Main frame과 각각의 tab을 독립된 process로 실행하여

하나의 tab에 문제가 발생한 경우 전체 창을 닫게 되는 사태를 예방합니다.


하지만 IE를 debugging 할 때는 process가 하나만 있는 것이 편합니다.

하나의 process만 사용하도록 설정하는 방법은 다음과 같습니다.


XP 기준 : rededit 실행

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main

TabProcGrowth(DWORD)의 값을 0으로 입력해주면 됩니다.



값이 없는 경우 만들어주면 됩니다.


위와 같이 설정할 경우 IE window 또는 tab을 생성하면 하나의 process만 활성화가 됩니다.

Main frame이 각각의 tab과 window까지 모두 담당하게 되는 것입니다.


1을 입력하게 되면 protected mode process가 하나 생성되고

tab과 window가 활성화 될 process 하나가 생성됩니다.


2 이상을 입력할 경우에는 child process가 그에 맞게 증가하게 됩니다.

대신 tab과 window를 하나씩 생성할 때 마다 Round-robin 방식으로 process를 순차적으로 선택하며 활성화됩니다.


'Note' 카테고리의 다른 글

Windbg symbol path  (0) 2015.02.03
FILE Structure  (0) 2012.12.27
DllImport String Parameter 전달  (0) 2012.11.30
Visual Studio 2010 IDE 설정  (0) 2012.11.29
Posted by slimV