我的PE了解

2021-07-02 13:25:56 字數 1516 閱讀 1324

一、什麼是pe檔案。

pe(portable executable)格式,是微軟win32環境可移植可執行檔案(如exe、dll、vxd、sys和vdm等)的標準檔案格式。

二、pe檔案格式

2.1rva、va和offset轉換和理解

offset 就是010editor以[0x00]開始的檔案中的位置       offset  = rva-所屬區段的基址(virtualaddress) + 所屬區段的節基於檔案的偏移量(pointertorawdata)

va         就是記憶體映像中的位置,即位址                           va          = rva - imagebase

rva       就是記憶體映像中的位置與檔案對映基址的差      rva        = va+imagebase

2.2pe檔案的關鍵頭

dos頭:

image_dos_header[0x40]:

[0x00]word   e_magic;  所有ms-dos相容的可執行檔案都將此值設為0x5a4d(mz).

[0x3c]dword e_lfanew;表示pe頭起始的位置.

pe頭:檔案資訊都在其中

struct _image_nt_headers ;

image_nt_headers[0x78]:前面0x78個字段固定

區段表:儲存各個區段的資訊,如名稱、大小、voffset、roffset等

image_section_header:

區段:檔案的資訊全部在區段中

三、pe檔案的資料資源資訊——以user32.dll的輸出表資訊為例

(在檔案中儲存的位置均為rva所以在檔案中查詢位置需要轉換為offset)

輸出表資訊

image_directory_entry_export

struct _image_data_directory ;

image_export_directory[0x28]:0x00000948

0x0c dword name;檔名稱

0x10 dword base;函式基序號0x000005dc

0x14 dword numberoffunctions;        函式數量      3eb

0x18 dword numberofnames;             函式名數量 336

0x1c dword addressoffunctions;         函式位址     0x00010570——>0x00000970

跳過去0x000789cb——>0x00068dcb過去後是函式的opcode

0x20 dword addressofnames;             函式名位址 0x0001151c——>0x0000191c

跳過去0x0001286b——>0x00002c6b後面就是乙個乙個的函式名了

0x24 dword addressofnameordinals;序號位址     0x000121f4——>0x000025f4跳過去就是函式的序號

了解Windows系統下的PE檔案

可執行檔案結構是作業系統的根基,windows系統下面有很多態別不同的檔案,例如 ex,dll,sys,ocx等檔案格式都遵從pe檔案結構的約定。pe檔案實在win32位系統中誕生的,而且與win64位系統中的可執行檔案格式基本相同。在windows系統中,可以以二進位制形式被系統載入執行的檔案都是...

我所了解的cgi

對於cgi,一開始我並沒有理解,一些概念性的東西,常常使我陷入咬文嚼字的陷阱裡。我希望找到乙個通俗易懂的案例,下面這段資料我個人覺得講得非常清楚 最早的web伺服器簡單地響應瀏覽器發來的http請求,並將儲存在伺服器上的html檔案返回給瀏覽器,也就是靜態html。事物總是不斷發展,也越來越複雜,所...

我所了解的LBS

lbs location based service,基於位置的服務。用通俗的話來描述這門技術的現實應用 讓世界知道你現在的位置,然後你可以知道你想關心的任何東西的位置。反正,和位置很相關 乙個很經典,很未來的lbs描述 這條微博紛紛被讚為lbs最佳商業應用,創造了上萬條的 記錄並被模仿,衍生了海底...