PE檔案學習 Dos頭部

2021-10-04 07:09:08 字數 1582 閱讀 9008

pe(portable executeable file format)可移植的執行文體格式,我們平時常見的exe\dll\sys等都是pe檔案的一種。pe檔案的組成可以被分為pe head和pe body,我們先從pe檔案頭的dos頭部說起。

dos頭部分為兩部分:第一部分是dos mz頭第二部分是dos stub(指令位元組碼)。

以下為dos mz頭部微軟給出的定義,其中我學習中用到的最關鍵兩個字段就是e_magic和e_lfanew,分別用來確定是否是pe檔案和定址nt headers的首位址

typedef

struct _image_dos_header // dos .exe header

image_dos_header,

*pimage_dos_header;

dos stub大多數時候是由編譯器自動生成,其長度是pe檔案鏈結生成時確定的,其長度在不同的pe檔案中不一定相同,其緊跟在dos mz頭部的下面,整個時乙個位元組塊,pe中沒有與之相關的結構體。所以我們不可以直接用 dos heaher基位址+sizeof(image_dos_header)的方式定位到nt頭部。

接下來附上一點我的測試**和定位到nt頭的**:

tchar* cpehelper::

getfilemempointer

(tchar* filefullpath,dword* m_filesize)

//獲取檔案大小

dword filesize =

getfilesize

(filehandle,

null);

*m_filesize = filesize;

//檔案大小返出值

//申請記憶體 用來存放pe檔案資料

tchar* buferdata =

new tchar[filesize]

;//讀檔案

dword returnlength;

readfile

(filehandle, buferdata, filesize,

&returnlength,

null);

//關閉檔案控制代碼

if(filehandle !=

null

)//返回pe檔案起始位置(基址)

return buferdata;

}//.......判斷pe檔案的一部分**

pimage_dos_header imagedosheader =

(pimage_dos_header)filebuffer;

//filebuffer = 上面函式返回的bufferdata

if(imagedosheader-

>e_magic != image_dos_signature)

//定位到nt頭部

pimage_nt_headers imagentheaders =

(pimage_nt_headers)

(imagedosheader-

>e_lfanew +

(ulong)filebuffer)

;

next:image_nt_headers

PE檔案學習 Nt頭部

當我們越過dos stub之後就來到了image nt headers,這個結構在32位和64位下的大小是不一樣的,這個結構體緊跟在dos stub之後,結構體看起來只有三個成員,接下來我們來乙個乙個細細解剖 typedef struct image nt headers64 image nt he...

PE檔案之DOS頭

微軟為了照顧相容性,在以後的pe檔案中也加入了dos頭 在dos頭有兩個部分 1 dos mz頭 結構體為 image dos header struct 0h word e magic magic dos signature mz 4dh5ah dos可執行檔案標記 2h word e cblp ...

PE檔案詳解一 M DOS頭部IMAGE DOS

1.m dos頭部結構體 image dos header struct image dos header ends 1.該結構有兩個重要的成員 dword e magic和long e lfanew。dword e magic為 mz 定義為image dos signature。long e l...