一、什麼是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最佳商業應用,創造了上萬條的 記錄並被模仿,衍生了海底...