Press "Enter" to skip to content

PE格式研究(1)

1.進程的載入

當我們Double click一個文件時 , 系統會跟據文件的附檔名來選擇一個合適的程序開啟

我們可以在[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerFileExts]中看到所有的關聯

如果是exe的話 , 系統會啟用一個Loader , 檢查MZ Header是否存在 , 如果存在的話則會繼續找Peheader , 若2個都不存在則是Dos 16位的程式 , 若只存在MZ Header 不存在Pe header則不是一個有效的pe文件

2.PE結構

以下是Dos Header的結構

public unsafe struct IMAGE_DOS_HEADER

{ //DOS .EXE header

public ushort e_magic; //0x0 // Magic number

public ushort e_cblp; //0x2 // Bytes on last page offile

public ushort e_cp; //0x4 // Pages infile

public ushort e_crlc; //0x6 // Relocations

public ushort e_cparhdr; //0x8 // Size of header inparagraphs

public ushorte_minalloc; //0xA // Minimum extra paragraphs needed

public ushorte_maxalloc; //0xC // Maximum extra paragraphs needed

public ushort e_ss; //;0xE // Initial(relative) SS value

public ushort e_sp; //0x10 // InitialSP value

public ushort e_csum; //0x12 // Checksum

public ushort e_ip; //0x14 // InitialIP value

public ushort e_cs; //0x16 // Initial(relative) CS value

public ushort e_lfarlc; //0x18 // File address of relocation table

public ushort e_ovno; //0x1A // Overlay number

//[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 4)]

public fixed ushorte_res[4]; //0x1C // Reserved words

public ushort e_oemid; //0x24 // OEM identifier (for e_oeminfo)

public ushort e_oeminfo; //0x26 // OEMinformation; e_oemid specific

// [MarshalAsAttribute(UnmanagedType.ByValArray,SizeConst = 10)]

public fixed ushorte_res2 [10]; //0x28 // Reserved words

public uint e_lfanew; //0x3C // File address of new exe header

}

根據以上結構 , 寫出一小程式當是練手

PE格式研究(1)

Comments