①:image_dos_header struct 【m_dos頭部 共64位元組】
image_dos_header ends
②:dos stub【大約100個位元組左右《此處位元組數可選》】
③:typedef struct _image_nt_headers 【pe檔案頭 共248位元組】
image_nt_headers ends, *pimage_nt_headers32;
結構體一:typedef struct _image_file_header 【pe頭共20個位元組】
image_file_header, *pimage_file_header;
結構體二:typedef struct _image_optional_header【pe檔案共224位元組,其中資料目錄表佔128位元組】
image_optional_header32, *pimage_optional_header32;
結構體一:typedef struct _image_data_directory 【共佔8位元組】
image_data_directory,*pimage_data_directory;
④:typedef struct _image_section_header 【區塊表,共佔40位元組】
misc;
+0c h dword virtualaddress; // 節區的虛擬記憶體中rva位址
+10 h dword sizeofrawdata; // 節表在檔案中對齊後的尺寸
+14 h dword pointertorawdata; // 節表在檔案中的偏移量
+18 h dword pointertorelocations; // 在obj檔案中使用,重定位的偏移
+1c h dword pointertolinenumbers; // 行號表的偏移(供除錯使用地)
+20 h word numberofrelocations; // 在obj檔案中使用,重定位項數目
+22 h word numberoflinenumbers; // 行號表中行號的數目
+24 h dword characteristics; // 節屬性如可讀,可寫,可執行等
} image_section_header, *pimage_section_header;
⑤:image_import_descriptor struct 【輸入表結構,共20位元組】
ends
+04 h dword timedatestamp //可執行檔案是否與dll繫結,不繫結為0
+08 h dword forwarderchain //第乙個轉向的api索引
+0c h dword name //指向dll的虛擬rva
+10 h dword firstthunk //實際指向image_thunk_data陣列的指標,結構體一
};image_import_descriptor ends
結構體一:image_thunk_data struc 【共佔4位元組】
ends
}image_thunk_data ends
結構體二:image_import_by_name struct 【共佔大小動態分配】
;image_import_by_name ends
PE檔案結構
pe檔案結構 a,dos header timagedosheader 其中 lfanew 指向 c e magic 為 mz b,dos stub 用於不支援pe的作業系統,顯示錯誤提示如 this program requires windows 不定長 c,pe header timagent...
PE檔案頭結構
typedef struct image file header image file header,pimage file header 1.machine 每個cpu都有唯一的machine碼,用來指定檔案的執行平台 define image file machine unknown 0 def...
PE檔案結構(一)
pe portable execute 檔案是windows下可執行檔案的總稱,常見的有dll,exe,ocx,sys等,事實上,乙個檔案是否是pe檔案與其副檔名無關,pe檔案可以是任何副檔名。pe檔案是指32位可執行檔案,也稱pe32。64位可執行檔案稱為pe 或pe32 是pe pe32 的一種...