国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

PE文件格式詳解(1)

2019-11-17 05:04:16
字體:
來源:轉載
供稿:網友
  摘要  Windows NT 3.1引入了一種名為PE文件格式的新可執行文件格式。PE文件格式的規范包含在了MSDN的CD中(Specs and Strategy, Specifications, Windows NT File Format Specifications),但是它非常之晦澀。

  然而這一的文檔并未提供足夠的信息,所以開發者們無法很好地弄懂PE格式。本文旨在解決這一問題,它會對整個的PE文件格式作一個十分徹底的解釋,另外,本文中還帶有對所有必需結構的描述以及示范如何使用這些信息的源碼示例。

  我為了獲得PE文件中所包含的重要信息,編寫了一個名為PEFILE.DLL的動態鏈接庫,本文中所有出現的源碼示例亦均摘自于此。這個DLL和它的源代碼都作為PEFile示例程序的一部分包含在了CD中(譯注:示例程序請在MSDN中尋找),你可以在你自己的應用程序中使用這個DLL;同樣,你亦可以依你所愿地使用并構建它的源碼。在本文末尾,你會找到PEFILE.DLL的函數導出列表和一個如何使用它們的說明。我覺得你會發現這些函數會讓你從容應付PE文件格式的。  介紹  Windows操作系統家族最近增加的Windows NT為開發環境和應用程序本身帶來了很大的改變,這之中一個最為重大的當屬PE文件格式了。新的PE文件格式主要來自于UNIX操作系統所通用的COFF規范,同時為了保證與舊版本MS-DOS及Windows操作系統的兼容,PE文件格式也保留了MS-DOS中那熟悉的MZ頭部。

  在本文之中,PE文件格式是以自頂而下的順序解釋的。在你從頭開始研究文件內容的過程之中,本文會具體討論PE文件的每一個組成部分。

  許多單獨的文件成分定義都來自于Microsoft Win32 SDK開發包中的WINNT.H文件,在這個文件中你會發現用來描述文件頭部和數據目錄等各種成分的結構類型定義。但是,在WINNT.H中缺少對PE文件結構足夠的定義,在這種情況下,我定義了自己的結構來存取文件數據。你會在PEFILE.DLL工程的PEFILE.H中找到這些結構的定義,整套的PEFILE.H開發文件包含在PEFile示例程序之中。

  本文配套的示例程序除了PEFILE.DLL示例代碼之外,還有一個單獨的Win32示例應用程序,名為EXEVIEW.EXE。創建這一示例目的有二:首先,我需要測試PEFILE.DLL的函數,并且某些情況要求我同時查看多個文件;其次,很多解決PE文件格式的工作和直接觀看數據有關。例如,要弄懂導入地址名稱表是如何構成的,我就得同時查看.idata段頭部、導入映像數據目錄、可選頭部以及當前的.idata段實體,而EXEVIEW.EXE就是查看這些信息的最佳示例。

  閑話少敘,讓我們開始吧。   PE文件結構  PE文件格式被組織為一個線性的數據流,它由一個MS-DOS頭部開始,接著是一個是模式的程序殘余以及一個PE文件標志,這之后緊接著PE文件頭和可選頭部。這些之后是所有的段頭部,段頭部之后跟隨著所有的段實體。文件的結束處是一些其它的區域,其中是一些混雜的信息,包括重分配信息、符號表信息、行號信息以及字串表數據。我將所有這些成分列于圖1。
PE文件格式詳解(1)
圖1.PE文件映像結構

  從MS-DOS文件頭結構開始,我將按照PE文件格式各成分的出現順序依次對其進行討論,并且討論的大部分是以示例代碼為基礎來示范如何獲得文件的信息的。所有的源碼均摘自PEFILE.DLL模塊的PEFILE.C文件。

  這些示例都利用了Windows NT最酷的特色之一——內存映射文件,這一特色答應用戶使用一個簡單的指針來存取文件中所包含的數據,因此所有的示例都使用了內存映射文件來存取PE文件中的數據。
  注重:請查閱本文末尾關于如何使用PEFILE.DLL的那一段。(未完待續)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金川县| 无为县| 日喀则市| 清水县| 类乌齐县| 泰州市| 雅江县| 双峰县| 穆棱市| 宜春市| 松潘县| 婺源县| 进贤县| 太仓市| 澜沧| 遂川县| 沿河| 双流县| 临海市| 奇台县| 宿松县| 石屏县| 阿勒泰市| 昌邑市| 光泽县| 罗田县| 桃源县| 杂多县| 叶城县| 泾源县| 龙川县| 腾冲县| 惠来县| 宁武县| 武功县| 莱芜市| 垫江县| 冀州市| 广水市| 铅山县| 慈溪市|