실행파일 구조
IMAGE_OPTIONAL_HEADER 의 구조체
PE 구조체 중에서 가장 크기가 큰 구조체 31의 필드를 가지고 있고 있다.
이중 중요한것만 설명
1. Magic
구조체가 32bit용이라면 10Bh의 값을,64bit용이라면 20Bh의 값을 가진다.
2. AddressOfEntryPoint
EP의 RVA 주소값이 들어있다..
RVA값이므로 실제 EP는 AddressOfEntryPoint+ImageBase
3. ImageBase
PE파일이 맵핑되는 시작 주소를 가리킨다
4. SectionAlignment
메모리에서의 섹션의 최소단위를 나타낸다.
5. FileAlignment
파일에서의 섹션의 최소단위를 나타낸다.
4,5번의 최소단위를 맞추기 위해서 PE구조에서 각 section들이 끝나면 NULL값을 집어넣는 NULL padding이란 기술을 사용한다.
6. SizeOfImage
메모리에서의 PE구조의 크기를 나타낸다.
7. SizeOfHeader
PE header의 크기를 나타낸다.
8. Subsystem
1의 값을 가지면 드라이버 파일(SYS, VXD)파일
2의 값을 가지면 GUI파일
3의 값을 가지면 CUI파일이란 뜻입니다.
9. NumberOfRvaAndSizes
바로 밑에 있는 IMAGE_DATA_DIRECTORY구조체의 배열의 크기를 정한다.
(맨 처음에 #define으로 16이라고 크기가 정해져있지만 windows에서는 이 값을 보고 구조체 배열의 크기를 정합니다.)
test.bin의 헥사
IMAGE_OPTIONAL_HEADER
IMAGE_DATA_DIRECTORY 구조체
typedef struct _IMAGE_DATA_DIRECTORY {
DWORD VirtualAddress;
DWORD Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
구조체의 크기를 알 수 있는 매크로
#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
IMAGE_OPTIONAL_HEADER의 DataDirectory 필드는 Export Directory
Import Directory,Resource Directory,Exception Directory,Security Directory 영역 등에 접근할 수 있는 주소와 크기를 지니고 있는 배열로 IMAGE_DATA_DIRECTORY
구조체를 통해 가상 주소와 크기를 알 수 있다.
IMAGE_SECTION_HEADER
IMAGE_SECTION_HEADER 구조체
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
union {
DWORD PhysicalAddress;
DWORD VirtualSize;
} Misc;
DWORD VirtualAddress;
DWORD SizeOfRawData;
DWORD PointerToRawData;
DWORD PointerToRelocations;
DWORD PointerToLinenumbers;
WORD NumberOfRelocations;
WORD NumberOfLinenumbers;
DWORD Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
code 섹션, data 섹션,등등 정보를 알 수 있다.
섹션의 갯수 정보를 들고있는 곳은 IMAGE_FILE_HEADER 이다.
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
20140825 업무일지 양태영 [16번] (10) | 2014.08.26 |
---|---|
내용정리-손병규(출석번호14번) (10) | 2014.08.24 |
20140822 진행중인소스 (1) | 2014.08.22 |
출석번호13번[서상우]_수업보고서 (9) | 2014.08.22 |
20140819 업무일지 박영주 (4) | 2014.08.19 |
20140818 일일보고 9번 김해성 (11) | 2014.08.18 |
LDST 과제 (1) | 2014.08.18 |
20140808업무일지 김재성[7번] (15) | 2014.08.08 |