PE檔案學習系列筆記四 C 實現PE檔案的分析

2022-03-02 10:18:07 字數 2732 閱讀 6303

合肥程式設計師群:49313181。    合肥實名程式設計師群:128131462 (不願透露姓名和資訊者勿加入)

q  q:408365330     e-mail:[email protected]

綜述:c++**實現:

首先實現這些如圖程式的功能,其中包括識別是否是pe檔案,其次是給出,pe檔案在磁碟中的對齊尺寸和記憶體中的對齊尺寸,另乙個就是實現知道程式的裝載入口位址,都是以16進製制的方式表現出來的。

//

選擇檔案按鈕

void

cpeinfodlg::onbnclickedbtnselectfile()

else

else

//撤銷對映

unmapviewoffile(strcontet);

//關閉檔案對映物件控制代碼

closehandle(maphandle);

}//關閉檔案物件

closehandle(filehandle);

}else

}delete dilog;

//todo: 在此新增控制項通知處理程式**

}

我就主要上主要**,當然在這裡我們最起碼得知道mfc框架的簡單開發。

這些小功能的原理就是讀檔案,不過我這裡用的讀檔案的方式是檔案對映的方式,直接將檔案對映到記憶體中。

handle filehandle= createfile(filepath,generic_read,file_share_read,null,open_existing,file_attribute_normal,null);
2.然後建立乙個檔案對映物件

當然是以讀方式開啟。

3.然後就是檔案記憶體檢視對映

strcontet= mapviewoffile(maphandle,file_map_read,0,0,0);

其中strcontet是lpvoid型別,這個指標就指向了pe檔案被對映到記憶體中的起始位址
4.找dos頭和pe頭

pimage_dos_header doshead=(pimage_dos_header)lpbaseaddress;

pimage_nt_headers nthead=(pimage_nt_headers)(lpbaseaddress+doshead->e_lfanew);

pimage_dos_header 和pimage_nt_headers結構體就是廣義上的dos頭和pe頭結構。這兩個結構體在winnt.h標頭檔案中能找到。

5.判斷是否是pe檔案

if(doshead->e_magic==image_dos_signature&&nthead->signature==image_nt_signature)
就和我們在前面所說的doshead->e_magic是dos頭的標誌,裡面是mz所以dos頭又稱作mz頭,nthead->signature就是pe頭的標誌,內容是asiic碼pe00。我用ue開啟:

在winnt.h標頭檔案中被定義為image_dos_signature和image_nt_signature,顧名思義,dos頭標誌和pe頭標誌。這樣即使你隨便將乙個檔案修改成.exe字尾或者.dll字尾的pe格式檔案依然不通過驗證。

可以看見修改txt字尾為.exe是不行的。

6.顯示記憶體對齊尺寸程式入口位址等資訊

int h=nthead->optionalheader.filealignment;

_itow_s(h,r,

16);

show+=r;

this->getdlgitem(idc_static_filea)->setwindowtextw(show);

//記憶體對齊尺寸

int ss= nthead->optionalheader.sectionalignment;

_itow_s(ss,r,

16);

show=l"0x"

; show+=r;

this->getdlgitem(idc_static_sessionsize)->setwindowtextw(show);

//入口位址

int ept= nthead->optionalheader.addressofentrypoint;

_itow_s(ept,r,

16);

show=l"0x"

; show+=r;

this->getdlgitem(idc_static_baseentry)->setwindowtextw(show);

其中沒什麼複雜度,只是將結構成員資料處理顯示出來。這裡也驗證了。一般pe檔案在磁碟中的對齊粒度是200h在記憶體中的對齊粒度是1000h也就是4k,一分頁大小。

這一節就記到這裡,後續的功能等我們學習到的時候再去新增。

PE檔案學習筆記

了解pe檔案是了解windows系統的必經之路。下面把自己學習pe檔案相關知識的方法以及經驗和大家分享,其中前半部分在很大程度上參考了 windows核心程式設計 只是簡單的從中提取出個人認為精煉的分析,並新增一點個人的理解。如果你也想學習windows程式設計,了解windows系統是如何執行的,...

PE檔案學習筆記(3)

the section table 這個字段位於pe 表頭和真正的 section 資料之間,其中內含 image 的 每乙個sections 的資訊。section table 的每一筆資料貯存了乙個位址,在那裡,檔案的原始資料被映像到記憶體。雖然sections 類似 32 位的 segment...

JAVA學習筆記系列 菜鳥Vue學習筆記(四)

菜鳥vue學習筆記 四 上週學習了使用vue來操作表單元素進行資料雙向繫結,今天我們來學習下vue中的元件,vue中的元件作用就是去封裝一些常用的頁面標籤,將其當做乙個整體,以便在其他位置直接使用一組標籤。例如 這是定義了乙個全域性的元件,在其他位置使用方式為 好,我們初步的認識了元件,感覺它就像乙...