잠토의 잠망경

IMAGE_OPTIONAL_HEADER 구조 본문

카테고리 없음

IMAGE_OPTIONAL_HEADER 구조

잠수함토끼 2008. 8. 31. 00:22
typedef struct _IMAGE_OPTIONAL_HEADER {
    //
    // Standard fields.
    //

    WORD    Magic;	//pe32: 0x10b, PE64: 0x20B, ROM: 0x107, .NET PE: 0x10B
    BYTE    MajorLinkerVersion;	//linker Version: 9
    BYTE    MinorLinkerVersion;	//linker version: 0
    DWORD   SizeOfCode;	//코드섹션의 크기
    DWORD   SizeOfInitializedData;	//초기화된 데이터섹션의 크기
    DWORD   SizeOfUninitializedData; //초기화되지 않은 데이터섹션의 크기
									//보통 0이다.
    DWORD   AddressOfEntryPoint;	//런타임 시작루틴으로 
									//점프하는 코드가 있는 곳이다.
    DWORD   BaseOfCode;	//첫 번째 코드 섹션이 시작되는 RVA를 의미한다.
    DWORD   BaseOfData;	//데이터의 첫 번째 바이트의 RVA를 의미한다.

    //
    // NT additional fields.
    //

    DWORD   ImageBase;	// 해당 PE가 가상주소공간에 매핑될 때 
						// 매핑시키고자하는 메모리 상의 시작주소이다.
						// exe: 0x00400000, dll: 0x10000000
    DWORD   SectionAlignment;// 각 섹션의 시작주소는 이것의 배수이다.
							 // 보통 4K==0x1000 이다.
    DWORD   FileAlignment;	//PE 파일내에서의 정렬단위
    WORD    MajorOperatingSystemVersion;// 실행하는데 필요한 운영체제의 최소 버전
    WORD    MinorOperatingSystemVersion;//
    WORD    MajorImageVersion;//유저 나름대로의 버전을 주입할 수 있도록해준다.
    WORD    MinorImageVersion;//
    WORD    MajorSubsystemVersion;//Subsystem의 버전. Subsystem은 pe를 분석하여
    WORD    MinorSubsystemVersion;//메모리에 로딩시켜주는 역할을 한다.
    DWORD   Win32VersionValue; //거의 사용되고 있지 않다. 0이다.
    DWORD   SizeOfImage;	//Subsystem이 pe를 메모리 상에 로드할 때 확보/예약해야할
							//해당 PE의 충분한 크기를 가리킨다.
    DWORD   SizeOfHeaders;	//MS-DOS헤더,PE헤더,섹션테이블의 크기를 모두 합친 바이트
    DWORD   CheckSum;	
    WORD    Subsystem;	// 유저모드에서는 서브시스템이라는 컴포넌트가 존재한다.
						//IMAGE_SUBSYSTEM_WINDOWS_GUI(WinMain)  
						//->Image runs in the Windows GUI subsystem.
						//IMAGE_SUBSYSTEM_WINDOWS_CUI(main)		
						//->Image runs in the Windows character subsystem.
    WORD    DllCharacteristics;
    DWORD   SizeOfStackReserve;//default: 예약 크기
    DWORD   SizeOfStackCommit;// default: 4K ==0x1000
    DWORD   SizeOfHeapReserve;// default: 0x10000
    DWORD   SizeOfHeapCommit;//	 default: 4K ==0x1000
    DWORD   LoaderFlags;//0으로 셋
    DWORD   NumberOfRvaAndSizes;//다음의 DataDirectory의 원소의 개수 16이다.
    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];//
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
Comments