PE文件讀寫工具是一款可以幫你讀寫pe文件的工具,你可以利用這款軟件查看pe文件結(jié)構(gòu),還能對(duì)文件的各種信息進(jìn)行編輯標(biāo)注。軟件功能欄中的某些功能還未實(shí)現(xiàn),后面會(huì)持續(xù)更新實(shí)現(xiàn)這些功能。
PE文件基本概念:
PE文件是windows系統(tǒng)中遵循PE結(jié)構(gòu)的文件,比如以.exe .dll為后綴名的文件以及系統(tǒng)驅(qū)動(dòng)文件。(PE結(jié)構(gòu)框架看下圖)
PE文件大體分為兩部分,頭(包括下圖中的DOS頭,PE文件頭,塊表)與主體(塊)。
PE文件從磁盤當(dāng)中像內(nèi)存中的映射,不是簡單的“1對(duì)1”的關(guān)系,而是“拉長”了。具體的位置表現(xiàn)在塊。但是磁盤上的數(shù)據(jù)結(jié)構(gòu)與在內(nèi)存中的結(jié)構(gòu)是一致的。
無論P(yáng)E文件在磁盤中還是在內(nèi)存中,都少不了地址的概念,理解一下幾個(gè)概念至關(guān)重要。
虛擬地址(VA): 在一個(gè)程序運(yùn)行起來的時(shí)候,會(huì)被加載到內(nèi)存中,并且每個(gè)進(jìn)程都有自己的4GB,這個(gè)4GB當(dāng)中的某個(gè)位置叫做**虛擬地址**,由物理地址映射過來的,4GB的空間,并沒有全部被用到。
基地址(Imagebase):磁盤中的文件加載到內(nèi)存當(dāng)中的時(shí)候可以加載到任意位置,而這個(gè)位置就是程序的基址。EXE默認(rèn)的加載基址是400000h,DLL文件默認(rèn)基址是10000000h。需要注意的是基地址不是程序的入口點(diǎn)。
相對(duì)虛擬地址(RVA):為了避免PE文件中有確定的內(nèi)存地址,引入了相對(duì)虛擬地址的概念。RVA是在內(nèi)存中相對(duì)與載入地址(基地址)的偏移量,所以你可以發(fā)現(xiàn)前三個(gè)概念的關(guān)系:虛擬地址(VA)= 基地址+相對(duì)虛擬地址(RVA)
文件偏移地址(FOA):當(dāng)PE文件儲(chǔ)存在某個(gè)磁盤當(dāng)中的時(shí)候,某個(gè)數(shù)據(jù)的位置相對(duì)于文件頭的偏移量。
入口點(diǎn)(OEP):首先明確一個(gè)概念就是OEP是一個(gè)RVA,然后使用OEP +Imagebase ==入口點(diǎn)的VA,通常情況下,OEP指向的不是main函數(shù)。
存了張圖比較好的解釋了各部分的關(guān)系:
PE文件是什么:
PE文件的全稱是Portable Executable,意為可移植的可執(zhí)行的文件,常見的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微軟Windows操作系統(tǒng)上的程序文件(可能是間接被執(zhí)行,如DLL)
PE文件是指32位可執(zhí)行文件,也稱為PE32。64位的可執(zhí)行文件稱為PE+或PE32+,是PE(PE32)的一種擴(kuò)展形式(請(qǐng)注意不是PE64)。