1. 程式人生 > >PE檔案格式詳解(1)

PE檔案格式詳解(1)

PE頭由許多結構體組成,接下來分別解釋一下各部分。 1.DOS頭 微軟最初建立PE格式的時候,DOS檔案被人們廣泛的使用,為了實現PE檔案對DOS檔案的相容性。結果是在PE頭的最前面添加了一個IMAGE_DOS_HEADER結構體,用來擴充套件已有的DOS EXE頭程式碼IMAGE_DOS_HEADER結構體 typedef strucet _IMAGE_DOS_HEADER{ WORD e_magic;    //DOS  signature : 4D5A ("MZ")     WORD e_cblp;     WORD e_cp;     WORD e_crlc;     WORD e_cparhdr;
    WORD e_minalloc;     WORD e_maxalloc;     WORD e_ss;     WORD e_sp;     WORD e_csum;     WORD e_ip;     WORD e_cs;     WORD e_lfarlc;     WORD e_ovno;     WORD e_res[4];     WORD e_oemid;     WORD e_oeminfo;     WORD e_res2[10];     LONG e_lfanew;    //offset to NT header } IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
IMAGE_DOS_HEADER結構體的大小為40個位元組。該結構體有兩個重要的"成員":e_magice_lfanew.        e_magic  :  DOS簽名(signature,4d5a=>ASCII值"MZ")。     e_lfanew :  指示NT頭的偏移(根據不同檔案擁有可變值)。     所有的PE檔案在開始部分(e_magic)都有DOS簽名("MZ")。e_lfanew值指向NT頭所在位置。(NT頭的全稱為IMAGE_NT_HEADERS) PS:     Mark Zbikowski在微軟設計了DOS可執行檔案,MZ即取自其名字的首字母。 使用010 Editor開啟notepad.exe,檢視IMAGE_DOS_HEADERS結構體,如圖。

根據PE規範,檔案開始的兩個位元組為4D5A,e_lfanew值為000000F0(intel的CPU以逆序儲存資料,即小段序標識法)。 2.DOS存根 DOS存根(stub)在DOS頭的下方,是個可選項,並且大小不固定(即有無DOS存根,檔案均可正常執行)。DOS存根由程式碼與數混合而成,下圖就是notepad.exe的DOS存根。
上圖中,檔案偏移40~4D區域為16位的彙編指令。32位windows OS中不會執行該命令(由於被識別為PE檔案,所以完全忽視該程式碼)。在DOS環境中執行Notepad.exe檔案,或者使用DOS偵錯程式(debug.exe)執行他,可使其執行該程式碼(不識別PE檔案格式,所以被識別為DOS EXE檔案)。

介面中輸出字串"This program cannot be run in DOS mode"後便退出了,即notepad.exe檔案雖然是32位的PE檔案,但是帶有MS-DOS相容模式,可以在DOS環境中執行,執行DOS EXE程式碼,輸出"This program cannot be run in DOS mode"後終止。根據該特性便可在一個可執行檔案(EXE)中創建出另一個檔案,使它在DOS與Windows中都能執行(在DOS環境中執行16位DOS程式碼,在Windows環境中執行32位Windows程式碼)。

相關推薦

PE檔案格式(1)

PE頭由許多結構體組成,接下來分別解釋一下各部分。 1.DOS頭 微軟最初建立PE格式的時候,DOS檔案被人們廣泛的使用,為了實現PE檔案對DOS檔案的相容性。結果是在PE頭的最前面添加了一個I

PE檔案格式(六)

0x00 前言   前面兩篇講到了輸出表的內容以及涉及如何在hexWorkShop中找到輸出表及輸入DLL,感覺有幾個地方還是沒有理解好,比如由資料目錄表DataDirectory[16]找到輸出表表後以為找到輸入DLL就完了,其實這一流程的最終功能是通過輸入DLL找到輸入DLL呼叫的函

PE檔案格式(五)

0x00 前言   前一篇瞭解了區塊虛擬地址和檔案地址轉換的相關知識,這一篇該把我們所學拿出來用用了。這篇我們將瞭解更為重要的一個知識點——輸入表和輸出表的知識。 0x01 輸入表   首先我們有疑問。這個輸入表是啥?為啥有輸入表?其實輸入表就是記錄PE輸入函式相

PE檔案格式(四)

PE檔案格式詳解(四) 0x00 前言   上一篇介紹了區塊表的資訊,以及如何在hexwrokshop找到區塊表。接下來,我們繼續深入瞭解區塊,並且學會檔案偏移和虛擬地址轉換的知識。 0x01 區塊對齊值   首先我們要知道啥事區塊對齊?為啥要區塊對齊?這個問題

PE檔案格式(一)

在本文中, 我並不打算大講特講PE檔案的構成是什麼,每個欄位是什麼意思, 這些資料可以說在網上是浩瀚如海,到處都是的, 用google一搜, 開啟一看, 基本講解的都是大同小異。 由於pe檔案的結構比較龐大, 結構中套結構, 有的結構多達30多個欄位, 光看這些欄位都讓人夠

PE檔案格式(上)

Windows NT 3.1引入了一種名為PE檔案格式的新可執行檔案格式。PE檔案格式的規範包含在了MSDN的CD中(Specs and Strategy, Specifications, Windows NT File Format Specifications),

PE檔案格式(2)

MS-DOS頭部/真實模式頭部   如上所述,PE檔案格式的第一個組成部分是MS-DOS頭部。在PE檔案格式中,它並非一個新概念,因為它與MS-DOS 2.0以來就已有的MS-DOS頭部是完全一樣的。保留這個相同結構的最主要原因是,當你嘗試在Windows 3.1以下或MS-

PE檔案格式(4)

1.RVA to RAW     PE檔案載入到記憶體時,每個節區都要準確完成記憶體地址與檔案偏移的對映。這種對映便稱為RVA to RAW,實現這個過程需要經過以下的步驟。     1.查詢RVA所

PE檔案格式(六)

匯出資料段,.edata   .edata段包含了應用程式或DLL的匯出資料。在這個段出現的時候,它會包含一個到達匯出資訊的匯出目錄。WINNT.Htypedef struct _IMAGE_EXPORT_DIRECTORY {  ULONG Characteristics

PE檔案格式(0)

0.介紹  PE是Windows作業系統性愛使用的可執行檔案格式。它是微軟在UNIX平臺的COFF(Common Object File Format,通用物件格式)基礎上而成的(在Windows

png檔案格式【轉】

5.2.2  PNG影象檔案儲存結構(1) PNG檔案儲存結構的格式可以在http://www.w3.org/TR/REC-png.htm上找到定義。 BMP檔案總體上由兩部分組成,分別是PNG檔案標誌和資料塊(chunks),如表5-8所示。其中資料塊分為兩類:關鍵資料塊(cri

Class 檔案格式

Class 檔案格式詳解 Write once, run everywhere!,我們都知道這是 Java 著名的宣傳口號。不同的作業系統,不同的 CPU 具有不同的指令集,如何做到平臺無關性,依靠的就是 Java 虛擬機器。計算機永遠只能識別 0 和 1組成的二進位制檔案,虛擬機器就是我們編寫的程式碼和計

PNG檔案格式

                PNG檔案結構分析(上:瞭解PNG檔案儲存格式)前言我們都知道,在進行J2ME的手機應用程式開發的時候,在圖片的使用上,我們可以使用PNG格式的圖片(甚至於在有的手機上,我們只可以使用PNG格式的圖片),儘管使用圖片可以為我們的應用程式增加不少亮點,然而,只支援PNG格式的圖片

Android逆向之旅---SO(ELF)檔案格式

第一、前言從今天開始我們正式開始Android的逆向之旅,關於逆向的相關知識,想必大家都不陌生了,逆向領域是一個充滿挑戰和神祕的領域。作為一名Android開發者,每個人都想去探索這個領域,因為一旦你破解了別人的內容,成就感肯定爆棚,不過相反的是,我們不僅要研究破解之道,也要

[一]class 檔案淺析 .class檔案格式 欄位方法屬性常量池欄位 class檔案屬性表 資料型別 資料結構

ClassFile { u4 magic;//唯一作用是確定這個檔案是否為一個能被虛擬機器所接受的class檔案。魔數值固定為0xCAFEBABE,不會改變 u2 minor_version;//唯一作用是確定這個檔案是否為一個能被虛擬機器所接受的class檔案。魔數值固定為0xCAFEBABE,不會

s19檔案格式

1.概述 為了在不同的計算機平臺之間傳輸程式程式碼和資料,摩托羅拉將程式和資料檔案以一種可列印的格式(ASCII格式)編碼成s格式檔案。s格式檔案是Freescale推薦使用的標準檔案傳送格式。編譯完成之後,FreescaleCodeWarrior編譯器將在bin資料夾下自動生成“*.abs.s19”檔案,

Linux下可執行檔案格式

Linux下面,目標檔案、共享物件檔案、可執行檔案都是使用ELF檔案格式來儲存的。程式經過編譯之後會輸出目標檔案,然後經過連結可以產生可執行檔案或者共享物件檔案。Linux下面使用的ELF檔案和Windows作業系統使用的PE檔案都是從Unix系統的COFF檔案格式演化來的

TIFF影象檔案格式(3)

基本TIFF TAGS 本頁主要摘自 http://www.awaresystems.be/imaging/tiff/tifftags/baseline.html。每一個TAG均有原始連結,可以點選檢視詳細的描述。 這些基本Tag是所有TIFF編解碼器必須支援的Tag

SAM檔案格式

生物資訊上的東西,由於發展的時間不長,所以各種標準都不算是廣泛傳播。 尤其是檔案格式之類的,中文版的資料很少,不少英文版的說明也不是很清晰。 這裡對SAM格式進行一下解釋,希望對新人有所幫助。 如下是SAM檔案中的一行 FCC0YG3ACXX:2:1

GZIP壓縮原理分析(04)——第三章 gzip檔案格式(三02) gzip檔案頭

檔案頭由固定長度的部分和擴充套件部分組成,擴充套件部分不一定存在,尤其是網路傳輸使用的HTTP壓縮,如果使用了gzip格式,那麼對應的壓縮報文一般都不帶擴充套件部分。gzip檔案格式通過將頭部中定長部