본문 바로가기
코스웨어/14년 스마트컨트롤러

20140820 일일업무보고서 11번 문대영

by 알 수 없는 사용자 2014. 8. 20.
728x90
반응형

실행파일 구조

 

 

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 이다.

 

 

main.c

 

728x90