카테고리 없음
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;