合肥程式設計師群:49313181。 合肥實名程式設計師群:128131462 (不願透露姓名和資訊者勿加入)
q q:408365330 e-mail:[email protected]
綜述:c++**實現:
首先實現這些如圖程式的功能,其中包括識別是否是pe檔案,其次是給出,pe檔案在磁碟中的對齊尺寸和記憶體中的對齊尺寸,另乙個就是實現知道程式的裝載入口位址,都是以16進製制的方式表現出來的。
//我就主要上主要**,當然在這裡我們最起碼得知道mfc框架的簡單開發。選擇檔案按鈕
void
cpeinfodlg::onbnclickedbtnselectfile()
else
else
//撤銷對映
unmapviewoffile(strcontet);
//關閉檔案對映物件控制代碼
closehandle(maphandle);
}//關閉檔案物件
closehandle(filehandle);
}else
}delete dilog;
//todo: 在此新增控制項通知處理程式**
}
這些小功能的原理就是讀檔案,不過我這裡用的讀檔案的方式是檔案對映的方式,直接將檔案對映到記憶體中。
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_dos_header 和pimage_nt_headers結構體就是廣義上的dos頭和pe頭結構。這兩個結構體在winnt.h標頭檔案中能找到。pimage_nt_headers nthead=(pimage_nt_headers)(lpbaseaddress+doshead->e_lfanew);
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;其中沒什麼複雜度,只是將結構成員資料處理顯示出來。這裡也驗證了。一般pe檔案在磁碟中的對齊粒度是200h在記憶體中的對齊粒度是1000h也就是4k,一分頁大小。_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檔案學習筆記
了解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中的元件作用就是去封裝一些常用的頁面標籤,將其當做乙個整體,以便在其他位置直接使用一組標籤。例如 這是定義了乙個全域性的元件,在其他位置使用方式為 好,我們初步的認識了元件,感覺它就像乙...