日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PE文件数据结构汇总

發布時間:2025/4/14 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PE文件数据结构汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1?IMAGE_DOS_HEADER STRUCT 【M_DOS頭部 共64字節】

{ +00 h WORD e_magic // DOS可執行文件標記 MZ(4Dh 5Ah) +02 h WORD e_cblp ; Bytes on last page of file +04 h WORD e_cp ; Pages in file +06 h WORD e_crlc ; Relocations +08 h WORD e_cparhdr ; Size of header in paragraphs +0A h WORD e_minalloc ; Minimun extra paragraphs needs +0C h WORD e_maxalloc ; Maximun extra paragraphs needs +0E h WORD e_ss // DOS代碼的初始化堆棧SS +10 h WORD e_sp // DOS代碼的初始化堆棧指針SP +12 h WORD e_csum ; Checksum +14 h WORD e_ip // DOS代碼的初始化指令入口[指針IP] +16 h WORD e_cs // DOS代碼的初始堆棧入口 +18 h WORD e_lfarlc ; File Address of relocation table +1A h WORD e_ovno ; Overlay number +1C h WORD e_res[4] ; Reserved words +24 h WORD e_oemid ; OEM identifier(for e_oeminfo) +26 h WORD e_oeminfo ; OEM information;e_oemid specific +29 h WORD e_res2[10] ; Reserved words +3C h LONG e_lfanew // 指向PE文件頭 } IMAGE_DOS_HEADER ENDS
2?DOS Stub【大約100個字節左右<此處字節數可選>】


3?typedef struct _IMAGE_NT_HEADERS 【PE文件頭 共248字節】

{ +00 h DWORD Signature // PE標識頭PE(50h 45h),共4字節 +04 h IMAGE_FILE_HEADER FileHeader // 結構體一,PE頭共20個字節 +18 h IMAGE_OPTIONAL_HEADER32 OptionalHeader // 結構體二,PE文件共224字節 } IMAGE_NT_HEADERS ENDS, *PIMAGE_NT_HEADERS32;
結構體一:typedef struct _IMAGE_FILE_HEADER 【PE頭共20個字節】 { +04 h WORD Machine; // 運行平臺 +06 h WORD NumberOfSections; // 文件的區塊數目 +08 h DWORD TimeDateStamp; // 文件創建日期和時間 +0C h DWORD PointerToSymbolTable; // 指向COFF符號表(主要用于調試) +10 h DWORD NumberOfSymbols; // COFF符號表中符號個數(同上) +14 h WORD SizeOfOptionalHeader; // IMAGE_OPTIONAL_HEADER3 2 結構大小 +16 h WORD Characteristics; // 文件屬性 } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
結構體二:typedef struct _IMAGE_OPTIONAL_HEADER【PE文件共224字節,其中數據目錄表占128字節】 { +18 h WORD Magic; // 標志字, ROM 映像(0107h),普通可執行文件(010Bh) +1A h BYTE MajorLinkerVersion; // 鏈接程序的主版本號 +1B h BYTE MinorLinkerVersion; // 鏈接程序的次版本號 +1C h DWORD SizeOfCode; // 所有含代碼的節的總大小 +20 h DWORD SizeOfInitializedData; // 所有含已初始化數據的節的總大小 +24 h DWORD SizeOfUninitializedData; // 所有含未初始化數據的節的大小 +28 h DWORD AddressOfEntryPoint; // 程序執行入口RVA +2C h DWORD BaseOfCode; // 代碼的區塊的起始RVA +30 h DWORD BaseOfData; // 數據的區塊的起始RVA +34 h DWORD ImageBase; // 程序的首選裝載地址 +38 h DWORD SectionAlignment; // 內存中的區塊的對齊大小 +3C h DWORD FileAlignment; // 文件中的區塊的對齊大小 +40 h WORD MajorOperatingSystemVersion; // 要求操作系統最低版本號的主版本號 +42 h WORD MinorOperatingSystemVersion; // 要求操作系統最低版本號的副版本號 +44 h WORD MajorImageVersion; // 可運行于操作系統的主版本號 +46 h WORD MinorImageVersion; // 可運行于操作系統的次版本號 +48 h WORD MajorSubsystemVersion; // 要求最低子系統版本的主版本號 +4A h WORD MinorSubsystemVersion; // 要求最低子系統版本的次版本號 +4C h DWORD Win32VersionValue; // 莫須有字段,不被病毒利用的話一般為0 +50 h DWORD SizeOfImage; // 映像裝入內存后的總尺寸 +54 h DWORD SizeOfHeaders; // 所有頭 + 區塊表的尺寸大小 +58 h DWORD CheckSum; // 映像的校檢和 +5C h WORD Subsystem; // 可執行文件期望的子系統 +5E h WORD DllCharacteristics; // DllMain()函數何時被調用,默認為 0 +60 h DWORD SizeOfStackReserve; // 初始化時的棧大小 +64 h DWORD SizeOfStackCommit; // 初始化時實際提交的棧大小 +68 h DWORD SizeOfHeapReserve; // 初始化時保留的堆大小 +6C h DWORD SizeOfHeapCommit; // 初始化時實際提交的堆大小 +70 h DWORD LoaderFlags; // 與調試有關,默認為 0 +74 h DWORD NumberOfRvaAndSizes; // 下邊數據目錄的項數,Windows NT 發布是16 +78 h IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; // 數據目錄表【共占 128字節16個子參數】;結構體一 } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
結構體一:typedef struct _IMAGE_DATA_DIRECTORY 【共占8字節】 { +00 h DWORD VirtualAddress; //數據的RVA +04 h DWORD Size; //數據的大小 }IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
4 typedef struct _IMAGE_SECTION_HEADER 【區塊表,共占40字節】

{ +00 h BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; // 節表名稱,如“.text”【共占8字節】 +08 h union { DWORD PhysicalAddress; // 物理地址 DWORD VirtualSize; // 真實長度,這兩個值是一個聯合結構,可以使 用其中的任何一個,一般是取后一個 } 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;
5?IMAGE_IMPORT_DESCRIPTOR STRUCT 【輸入表結構,共20字節】

{ +00 h union {DWORD Characteristics ; 不知到是神馬浮云,不重要 DWORD OriginalFirstThunk //指向IMAGE_THUNK_DATA數組的指針 }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字節】{ union u1 {DWORD ForwarderString ; 指向一個轉向者字符串的RVA DWORD Function ; 被輸入的函數的內存地址 DWORD Ordinal ; 被輸入的API的序數值 DWORD AddressOfData ; 高位為0則指向IMAGE_IMPORT_BY_NAME 結構體二 }ends }IMAGE_THUNK_DATA ENDS
結構體二:IMAGE_IMPORT_BY_NAME STRUCT 【共占大小動態分配】 { +00 h WORD Hint //可選指向函數字段,神馬的浮云 +04 h BYTE Name ? //此處內存大小動態分配,定義了導入函數的以0結尾的字符串 };IMAGE_IMPORT_BY_NAME ENDS
6 資源

IMAGE_RESOURCE_DIRECTORY STRUCT 【資源表位于數據目錄表的第三項,共動態分配字節,其中結構體中的成員指出的RVA偏移量都是對于此結構體的地址作為基地址】 { +00 h DWORD Characteristics ; 理論上為資源的屬性,不過事實上總是0 +04 h DWORD TimeDateStamp ; 資源的產生時刻 +08 h WORD MajorVersion ; 理論上為資源的版本,不過事實上總是0 +0A h WORD MinorVersion +0C h WORD NumberOfNamedEntries ; 以名稱(字符串)命名的入口數量 +0E h WORD NumberOfIdEntries ; 以ID(整型數字)命名的入口數量 };IMAGE_RESOURCE_DIRECTORY ENDS
IMAGE_RESOURCE_DIRECTORY_ENTRY STRUCT { +10 h DWORD Name ; 目錄項的名稱字符串指針或ID,高位為1時指向子結構體一 +14 h DWORD OffsetToData ; 目錄項指針,高位為1時指向子結構體二 };IMAGE_RESOURCE_DIRECTORY_ENTRY ENDS
IMAGE_RESOURCE_DIR_STRING_U STRUCT { +00 h DWORD Length ; 字符串的長度 +04 h DWORD NameString ; UNICODE字符串,由于字符串是不定長的。由Length 制定長度 };IMAGE_RESOURCE_DIR_STRING_U ENDS
IMAGE_RESOURCE_DATA_ENTRY STRUCT { +00 h DWORD OffsetToData ; 資源數據的RVA +04 h DWORD Size ; 資源數據的長度 +08 h DWORD CodePage ; 代碼頁, 一般為0 +0C h DWORD Reserved ; 保留字段 };IMAGE_RESOURCE_DATA_ENTRY ENDS
7?IMAGE_EXPORT_DIRECTORY STRUCT導出表

數據目錄表的第一個成員指向導出表,是一個IMAGE_EXPORT_DIRECTORY(以后簡稱IED)結構,IED 結構的定義如下:

IMAGE_EXPORT_DIRECTORY STRUCT【導出表,共40字節】{+00 h DWORD Characteristics ; 未使用,總是定義為0+04 h DWORD TimeDateStamp ; 文件生成時間+08 h WORD MajorVersion ; 未使用,總是定義為0+0A h WORD MinorVersion ; 未使用,總是定義為0+0C h DWORD Name ; 模塊的真實名稱+10 h DWORD Base ; 基數,加上序數就是函數地址數組的索引值+14 h DWORD NumberOfFunctions ; 導出函數的總數+18 h DWORD NumberOfNames ; 以名稱方式導出的函數的總數+1C h DWORD AddressOfFunctions ; 指向輸出函數地址的RVA+20 h DWORD AddressOfNames ; 指向輸出函數名字的RVA+24 h DWORD AddressOfNameOrdinals ; 指向輸出函數序號的RVA};IMAGE_EXPORT_DIRECTORY ENDS
8?【基址重定位位于數據目錄表的第六項,共8+N字節】

IMAGE_BASE_RELOCATION STRUC { +00 h DWORD VirtualAddress ;重定位數據開始的RVA 地址 +04 h DWORD SizeOfBlock ;重定位塊得長度,標識重定向字段個數 +08 h WORD TypeOffset ;重定項位數組相對虛擬RVA,個數動態分配 }; IMAGE_BASE_RELOCATION ENDS




總結

以上是生活随笔為你收集整理的PE文件数据结构汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 2019av视频| 亚洲熟女综合色一区二区三区 | 成人在线免费视频观看 | 美女脱光内衣内裤 | 少妇厨房愉情理伦bd在线观看 | 成人欧美一区二区三区黑人一 | 91黑人精品一区二区三区 | 国产精品人妻一区二区三区 | 一区二区三区免费看视频 | 精品人妻视频在线 | 亚洲乱码电影 | 男女污网站 | 黄色大片黄色大片 | 国产三级国产精品国产国在线观看 | 亚洲中文字幕一区 | 少妇又紧又爽视频 | 国产伦人伦偷精品视频 | 激情五月婷婷在线 | 欧美激情一区二区视频 | 蜜桃av乱码一区二区三区 | 一区二区视频播放 | 日本免费黄视频 | 96久久精品 | 国产资源精品 | 三级在线看中文字幕完整版 | 亚洲性久久 | 素人av在线 | 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲精品性 | 成人在线激情 | 亚洲精品97久久中文字幕无码 | 亚洲欧美在线综合 | 亚洲免费一二三区 | 日本免费黄色片 | 明日花绮罗高潮无打码 | 国产欧美日韩中文字幕 | 亚洲视频一二区 | 求欧美精品网址 | 久久国产乱子伦精品 | 国产又大又黄视频 | 一区二区三区 日韩 | av调教 | 欧美精品啪啪 | 亚洲天堂激情 | 日本一区二区在线视频 | 刘玥91精选国产在线观看 | 内射后入在线观看一区 | 久久精品屋| www日本色| 国产熟女一区二区三区四区 | 久久久国产高清 | 成人黄色片视频 | 国产精品腿扒开做爽爽爽挤奶网站 | 91精品网| 婷婷视频 | av在线网页 | 欧美深夜福利 | 亚洲第七页 | а√在线中文网新版地址在线 | 人妻一区二区三区在线 | 久久久久精| 国产免费av一区二区 | 男ji大巴进入女人视频 | 狂野欧美性猛交xxⅹ李丽珍 | 一区二区三区少妇 | 亚洲区国产区 | 欧州一区| 一区二区三区免费毛片 | 国产日韩欧美视频在线 | 欧美日本在线 | 怡红院成永久免费人全部视频 | 一级色视频 | 国产情侣在线视频 | 国产精品成人午夜视频 | 日日夜夜免费精品视频 | 亚洲午夜福利在线观看 | 日韩精品中文字幕在线播放 | 超碰人人艹 | 亚洲精品成人片在线观看精品字幕 | 国产福利视频网站 | www.av网址 | 曰批又黄又爽免费视频 | 亚洲成年人在线观看 | 五月天亚洲色图 | 在线观看一区二区三区四区 | 国产男男一区二区三区 | 成人综合社区 | 日韩视频欧美视频 | 成人tiktok黄短视频 | 天天插夜夜操 | 麻豆av一区二区三区久久 | 影音先锋中文字幕在线播放 | 男男肉耽高h彩漫 | 国产成人综合av | 日韩精品网站 | 亚洲精品免费电影 | xxxxhdvideos| 亚洲产国偷v产偷v自拍涩爱 | 91们嫩草伦理 |