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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

手写PE文件(一)

發布時間:2025/4/5 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手写PE文件(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DOS Header(IMAGE_DOS_HEADER)->64 Byte

DOS頭部

???????????????????? DOS Stub 112字節

?

????????????????????"PE"00(Signature) 4個字節

?

??????????????????? IMAGE_FILE_HEADER? 20個字節

?

PE文件頭?????? IMAGE_OPTIONAL_HEADER32? 96個字節

?

??????????????????? 數據目錄表?????????16*8=128個字節

?

??????????????????? IMAGE_SECTION_HEADER??? 40個字節

?

塊表????????????? IMAGE_SECTION_HEADER??? 40個字節

?

??????????????????? IMAGE_SECTION_HEADER??? 40個字節

?

??????????????????? .text?? 512個字節

?

塊???????????????? .rdata? 512個字節

?

??????????????????? .data?? 512個字節

??????????????????

????????????????????COFF 行號

?

調試信息??????? COFF符號表

?

??????????????????? Code View調試信息

1這部分可以使讀者對PE文件整體結構有一個大概了解。

2方便審查自己的構造進度 本次構造的PE文件總共有3個塊,他們分別用來存放可執行代?

? 碼,輸入表信息,以及全局變量,接觸過PE文件的朋友對區塊的概念應該不陌生,我們知道windows下的很多應用程序的文件對齊制度,也就是大名鼎鼎的FileAlignment字段的值最多200個字節,也就是十進制的512字節,對于不足512個字節的,要填充00補完512個字節,對于超過512個字節,要多分配512個字節

?本例中的PE文件頭64+112+4+20+224+40*3=544個字節但是顯然要填充到1024個字節,整個文件體積就是512*2(PE文件頭)+512*3(塊)=2560個字節,這也就是我們構造的PE文件總的大小

提前搞清一些字段與區段的偏移量也是比較重要的,

?1 PE文件頭開始位置B0

?2 IMAGE_OPTIONAL_HEADER32開始處000000C8h

?3 數據目錄表開始處 00000128h

?4 塊表開始處 000001A8h

?5 .text區段開始處 00000400

?6 .rdata區段開始處 00000600

?7 .data區段開始處 00000800

二:重點字段的介紹

?1 DOS頭部

?? 1-1 DOS Header

?????? 1-1-1 e_magic[WORD]-->4D5A(DOS可執行文件頭標記)

???????1-1-19 e_lfanew[WORD]->BO OO OO OO (指定PE文件頭的偏移量64+112)

?2 PE文件頭

?? 2-1 "PE"00

?????? 2-1-1 Signature[DWORD]-->50450000(PE文件頭標記)

????????? 注釋:此處的值總為0000h

?

???2-2 IMAGE_FILE_HEADER

?????? 2-2-1 Machine[DWORD]--->4C 01(可執行文件的目標CPU類型)

??????????注釋:次PE文件運行于哪個CUP下,其標志就為相應的值

????????? interl i386 14C h????????????????? MIPS R3000 162h

????????? MIPS R4000? 166h???????????????Alpha AXP 184h

????????? Power PC 1F0h

?????? 2-2-2? NumberOfSections[WORD]--->03 00區段數目

??????????注釋:此值取決于PE文件的區塊數目,本程序為3個區段

?????? 2-2-3? SizeOfOptionalHeader[WORD]--->E0 00(PE 可選頭大小)

????????? 注釋:此值表示PE可選頭的大小

?????? 2-2-7 Characteristics[WORD]--->OF O1(文件屬性)

????????? 注釋: 此值為文件的執行屬性,EXE文件的屬性一般為010Fh,DLL文件般?

???????????? 為0210h

???2-3 IMAGE_OPTIONAL_HEADER

??????? 2-3-1? Magic[WORD]--->OB 01(*標記字)

???????????注釋:此處是一個標記字,用于描述PE文件的映像類型,ROM映像0107h,普通可?

??????????????? 執行映像010Bh,PE32+則是020Bh。

??????? 2-3-7 AddressOfEntryPoint[DWORD]--->00 10 00 00(*程序執行入口)

???????????注釋:通俗的講就是指向可執行代碼區塊(.text)的首地址

??????? 2-3-10 ImageBase[DWORD]--->00 00 40 00(*程序默認裝入基地址)

??????? 2-3-11 SectionAlignment[DWORD]-內存中的對齊大小,也叫做塊粒度,其默認值是CPU頁大小

??????? 2-3-12 FileAlignment[DWORD]--->00 02 00 00(*文件區中區塊對齊值)

?????????? 注釋: 磁盤上的PE文件的區塊對齊大小,這個值必須是2的冪,并且最小是200h

??????? 2-3-17 MajorSubsystemVersion[WORD]--->04 00(*運行所需最低子系統主版本號)

?????????? 注釋:要求最低的子系統主版本號,一般情況下為4

??????? 2-3-18 MinorSubsystemVersion[WORD]--->00 00(*運行所需最低子系統次版本號)

?????????? 注釋:要求最低的子系統次版本號,一般情況下都為0

??????? 2-3-20 SizeOfImage[DWORD]--->00 40 00 00(映像裝入內存后總尺寸)

?????????? 注釋:指的是裝入文件從Image Base到最后一個區塊大小

??????? 2-3-21 SizeOfHeaders [DWORD]--->00 04 00 00(*DOS頭 PE頭,區塊表的總大小)

?????????? 注釋:指的是DOS頭,PE頭與區塊表的總大小,并且所有這些項目都是出現在PE文件中任何代碼和數據之前,此值遵循文件對齊制度

??????? 2-3-23 Subsystem[WORD]--->03 00(*文件子系統)

?????????? 注釋:標明可執行文件所期望的子系統

??????? 2-3-30 NumberOfRvaAndSizes[DWORD]--->10 00 00 00(數據目錄表的項數,默認值16)

?????????? 注釋:數據目錄的項數,這個自動從NT系統發布以來就是16

?? 2-4 數據目錄表

??????? 2-4-2 Import Table

???????????注釋:輸入表

???????????2-4-2-1 VirtualAddress[DWORD]--->10 20 00 00(*數據塊起始RAV)

???????????? 注釋:輸入表的起始地址,要去除IAT所占空間,直接從第一個IID開始

???????????2-4-2-2 Size[DWORD]--->3C 00 00?00 (*數據塊大小)

???????????? 注釋:從第一個IID到最后一個IMAGE_IMPORT_BY_NAME的總長度

3 塊表

???? 3-1 IMAGE_SECTION_HEADER(1.text)

?????????? 3-1-1 Name[BYTE]--->2E 74 65 78 74 00 00 00(*8個字節的塊名)

????????????? 注釋:此區塊的名稱,限制在8個字節內

?????????? 3-1-2 VirtualSize[DWORD]--->26 00 00 00(被實際使用的區塊大小)

??????????????注釋:此區塊包含數據的大小

?????????? 3-1-10 Characteristics[DWORD]--->20 00 00 60(該區塊的讀寫執行屬性)

?????????????????????? *----------------------------------------------------------------*
? ?? ?? ? |??字段值? ?|? ?? ?? ?? ???用 途? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???|
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 00000020h | 包含代碼,常與10000000h一起設置 |
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 00000040h | 包含已初始化數據? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?|
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 00000080h | 包含未初始化數據? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?|
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 02000000h | 可以被丟棄? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???|
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 10000000h | 共享塊? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?|
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 20000000h | 可執行? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?|
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 40000000h | 可讀? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?|
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 80000000h | 可寫? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?|
? ?? ?? ? -----------------------------------------------------------------

?

?

4 塊

????? 4-1?.text(*此區段是一段匯編代碼的16進制形式,功能是彈出一個MessageBox提示框)?

?????????? 6A 00 68 00 30 40 00 68 07 30 40 00 6A 00 E8 07 00 00 00 6A 00 E8 06 00 00 00 FF 25 08 20 40 00 FF 25 00 20 40 00

????? 4-2 .rdata (該區塊包含輸入表)

???????????? 4-2-1 IMAGE_THUNK_DATA32(IAT1)

?????????????注釋:其實IMAGE_THUNK_DATA32是一個聯合體,可以同時代表IAT和INT

??????????????? 4-2-1-1 AddressOfData[DWORD]--->76 20 00 00(*指向IMAGE_IMPORT_BY_NAME的RVA)

??????????????? 注釋:作為IAT時我們就使用它的成員AddressOfData成員,用來存放指向IMAGE_IMPORT_BY_NAME的RVA,當程序裝入內存后,只與IAT交換信息,輸入表的其他部分就不再需要了。[由于本例子中兩個API引自兩個不同DLL中,所以要補充00 00 00 00結束]

??????????????? 4-2-3 IMAGE_IMPORT_DESCRIPTOR(IID 1)

??????????????? 注釋:這里稍微復雜些,它的作用是使用INT指定某個DLL文件中的API函數,并配合IAT指向相關API的地址

???????????????????4-2-3-1 OriginalFirstThunk[DWORD]--->4C 20 00 00(*指向輸入名稱表INT的RVA)

?????????????????? 注釋:這里指定某個DLL中API函數

?

???????????????????4-2-3-4 Name[DWORD]--->6A 20 00 00(指向DLL名字的RVA與指針)

?????????????????? 注釋:這里指定某個系統DLL

?????????????????? 4-2-3-5 FirstThunk[DWORD]--->08 20 00 00(指向輸入地址表的IAT的RVA)

???????????????????注釋:這里指定相關的IAT,并由IAT在IMAGE_IMPORT_BY_NAME中獲得相應API的地址

????????????? 4-2-4 IMAGE_IMPORT_DESCRIPTOR(IID 2)

?????????????????? 4-2-4-1 OriginalFirstThunk [DWORD]--->54 20 00 00(*指向輸入名稱表INT的RVA)

?????????????????? 4-2-4-4 Name [DWORD]--->84 20 00 00(*指向DLL名字的RVA與指針)

?????????????????? 4-2-4-5 FirstThunk [DWORD]--->00 20 00 00(*指向輸入地址表IAT的RVA)

????????? [填充20個00h空字節做結尾標記]

?????? 4-2-5 IMAGE_THUNK_DATA32(INT 1)

??????????4-2-5-1 ForwarderString [DWORD]--->5C 20 00 00

????????? 注釋:直接指向相關API函數

??????????【由于本例子中兩個API函數引自兩個不同的DLL中,所以要補充00 00 00 00結束】

?????? 4-2-7 IMAGE_IMPORT_BY_NAME(1)

?????????? 4-2-7-2 Name[BYTE]--->4D 65 73 73 61 67 65 42 6F 78 41(MessageBoxA的16進制碼)

?????????? 注釋:相關API函數的16進制碼

?????????? 【后面跟輸出函數的DLL名稱16進制碼00 75 73 65 72 33 32 2E 64 6C 6C 00 00 user32.dll】注釋:相關系統的API函數羅列完畢后,通常在最后一個AIP后面加00,并跟著DLL名稱的16進制數據

三 PE文件結構字段清單

??? 1 DOS頭部

????? 1-1 DOS Header

??????? 1-1-1 e_magic [WORD]---> 4D 5A(*DOS可執行文件頭標記)

????????1-1-2 e_cblp [WORD]---> 00 00(文件最后頁的字節數)

????????1-1-3 e_cp[WORD]--->00 00(文件頁數)

????????1-1-4 e_crlc[WORD]--->00 00(重定位元素個數)

??????? 1-1-5 e_cparhdr[WORD]--->00 00(以段落為單位的頭部大小)

????????1-1-6 e_minalloc[WORD]--->00 00(所需的最小附加段)

??????? 1-1-7 e_maxalloc[WORD]--->00 00(所需的最大附加段)

??????? 1-1-8 e_ss[WORD]--->00 00(初始的堆棧段(ss)相對偏移量)

??????? 1-1-9 e_sp[WORD]--->00 00(初始的堆棧指針(SP)值)

????????1-1-10 e_csum[WORD]--->00 00(校驗和)

????????1-1-11 e_ip[WORD]--->00 00(初始的指令指針(IP)值)

??????? 1-1-12 e_cs[WORD]--->00 00(初始的代碼段(CS)的偏移量)

??????? 1-1-13 e_lfarlc[WORD]--->00 00(重定位表在文件中的偏移量)

????????1-1-14 e_ovno[WORD]--->00 00(覆蓋號)

??????? 1-1-15 e_res[WORD]--->00 00(保留字,一般都為確保對齊而保留)

??????? 1-1-16 e_oemid[WORD]--->00 00(OEM標識符,相對于e_oemid)

??????? 1-1-17 e_oeminfo[WORD]--->00 00(OEM信息,即OEM細節)

??????? 1-1-18 e_res[WORD]--->00 00(保留字,一般為對齊而保留)

??????? 1-1-19 e_lfanew[DWORD]--->B0 00 00 00(指向PE文件頭的偏移量,BO=64+112)

2 PE文件頭

? 2-1 PE 00

???? 2-1-1 Signature[DWORD]--->50 45 00 00(*PE文件頭標記)

? 2-2 IMAGE_FILE_HEADER

???? 2-2-1 Machine[WORD]--->4C 01(可執行文件的目標CPU類型)

???? 2-2-2NumberOfSections[WORD]--->03 00區塊數目

???? 2-2-3TimeDateStamp [DWORD]--->00 00 00 00(文件創建時間和日期)

???? 2-2-4 PointerToSymbolTable[DWORD]---->00 00 00 00(指向符號表,用于調試)

???? 2-2-5 NumberOfSymbols[DWORD]--->(符號表中的符號個數,用于調試) 00 00 00 00

???? 2-2-6 SizeOfOptionalHeader[WORD]--->E0 00(PE頭IMAGE_OPTIONAL_HEADER32)大小

???? 2-2-7 Characteristics [WORD]--->OF O1 (*文件屬性)

2-3 IMAGE_OPTIONAL_HEADER32

2-3-1 Magic [WORD]--->OB 01(*標記字) 2-3-2 MajorLinkVersion [BYTE] 00(連接程序主版本號) 2-3-3 MinorLinkVersion [BYTE] 00 (連接程序主版本號) 2-3-4 SizeOfCode [DWORD] 00 00 00 00(所含代碼區塊的總大小) 2-3-5 SizeOfInitializedData[DWORD] 00 00 00 00(所有初始話數據區塊總大小) 2-3-6 SizeOfUninitializedData[DWORD] 00 00 00 00(所有未初始話數據區塊大小) 2-3-7 AddressOfEntryPoint 00 10 00 00(程序入口點RAV) 2-3-8 BaseOfCode 00 00 00 00(代碼區塊起始RVA) 2-3-9 BaseOfData 00 00 00 00(數據區塊起始RVA) 2-3-10 ImageBase 00 00 40 00(程序默認裝入基地址) 2-3-11 SectionAlignment 00 10 00 00 內存中區塊對齊值 2-3-12 FileAlignment 00 02 00 00文件中區塊對齊值 2-3-13 MajorOperatingSystemVersion 00 00操作系統主版本號 2-3-14 MinorOperatingSystemVersion 00 00操作系統次版本號 2-3-15?MajorImageVersion 00 00用戶定義主版本號 2-3-16 MinorImageVersion 00 00用戶定義次版本號 2-3-17 MajorSubSystemVersion 04 00運行所需最低子系統主版本號 2-3-18 MinorSubSystemVersion 00 00運行所需最低子系統次版本號 2-3-19 Win32VersionValue 00 00 00 00保留值,通常為0 2-3-20 SizeOFimage 00 40 00 00映像裝入內存后的總尺寸 2-3-21 SizeOfHeaders 00 04 00 00DOS頭 PE頭 區塊表的總大小 2-3-22 CheckSum 00 00 00 00映像校驗和 2-3-23 SubSystem 03 00文件子系統 2-3-24 DllCharacteristics 00 00顯示DLL特性的旗標 2-3-25 SizeOfStackReserve 00 00 00 00初始話堆棧總大小 2-3-26 SizeOfStackCommit 00 00 00 00初始話提交堆棧大小 2-3-27 SizeOfHeapReserve 00 00 00 00 初始話保留堆棧大小 2-3-28 SizeOfHeapCommit 00 00 00 00 初始話實際保留堆棧大小 2-3-29 LoaderFlags 00 00 00 00與調試有關,默認值為0 2-3-30 NumberOfRvaAndSizes 10 00 00 00 數據目錄表的數目 2-4數據目錄表 2-4-1 Export Table 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小

????

????????

2-4-10 Threda local storage(TLS) 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小 2-4-11 Load configuration 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小 2-4-12 Bound import 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小 2-4-13 Import Address Table(IAT) 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小 2-4-14 Delay import??? 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小 2-4-15 COM descriptor 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小 2-4-1 保留 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小 3塊表 3-1 IMAGE_SECTION_HEADER(1.text) 3-1-1 Name[BYTE]-->2E 74 65 78 74 00 00 00(8個自己的塊名) 3-1-2 VirtualSize 26 00 00 00被實際使用的區塊大小 3-1-3 VirtualAddress 00 10 00 00區塊的RVA地址 3-1-4 SizeOfRawData 00 02 00 00 該塊在磁盤中占的大小 3-1-5 PointerToRawData 00 04 00 00該塊在文件中的偏移 3-1-6?PointerToRelocations 00 00 00 00在OBJ文件中使用,調試中使用 3-1-7 PointerToLinenumbers00 00 00 00行號表的偏移,調試中使用 3-1-8 NumberOfRelocations00 00在OBJ文件中使用,重定位項數目 3-1-9 NumberOfLinenumbers 00 00行號表中行號數目 3-1-10 Characteristics 20 00 00 60該區的執行讀寫屬性 3-2 IMAGE_SECTION_HEADER(1.rdata) 3-1-1 Name[BYTE]-->2E 72 64 61 74 61 00 00(8個自己的塊名) 3-1-2 VirtualSize 92 00 00 00被實際使用的區塊大小 3-1-3 VirtualAddress 00 20 00 00區塊的RVA地址 3-1-4 SizeOfRawData 00 02 00 00 該塊在磁盤中占的大小 3-1-5 PointerToRawData 00 06 00 00該塊在文件中的偏移 3-1-6?PointerToRelocations 00 00 00 00在OBJ文件中使用,調試中使用 3-1-7 PointerToLinenumbers00 00 00 00行號表的偏移,調試中使用 3-1-8 NumberOfRelocations00 00在OBJ文件中使用,重定位項數目 3-1-9 NumberOfLinenumbers 00 00行號表中行號數目 3-1-10 Characteristics 40 00 00 40該區的執行讀寫屬性 3-3 IMAGE_SECTION_HEADER(1.data) 3-1-1 Name[BYTE]-->2E 64 61 74 61 00 00 00(8個自己的塊名) 3-1-2 VirtualSize 3E 00 00 00被實際使用的區塊大小 3-1-3 VirtualAddress 00 30 00 00區塊的RVA地址 3-1-4 SizeOfRawData 00 02 00 00 該塊在磁盤中占的大小 3-1-5 PointerToRawData 00 08 00 00該塊在文件中的偏移 3-1-6?PointerToRelocations 00 00 00 00在OBJ文件中使用,調試中使用 3-1-7 PointerToLinenumbers00 00 00 00行號表的偏移,調試中使用 3-1-8 NumberOfRelocations00 00在OBJ文件中使用,重定位項數目 3-1-9 NumberOfLinenumbers 00 00行號表中行號數目 3-1-10 Characteristics 40 00 00 C0該區的執行讀寫屬性 4塊 4-1 .text(該區塊是一段匯編代碼16進制形式,功能是彈出一個MessageBox提示框) 6A 00 68 00 30 40 00 68 07 30 40 00 6A 00 E8 07 00 00 00 6A 00 E8 06 00 00 00 FF 25 08 20 40 00 FF 25 00 20 40 00 4-2 .rdata(該區塊包括輸入表) 4-2-1 IMAGE_THUNK_DATA32(IAT1) 4-2-1-1 AddressOfData 76 20 00 00(*指向IMAGE_IMPORT_BY_NAME的RVA??? 由于本例子中兩個API函數引自兩個不同DLL,所以要補充00 00 00 00結束 4-2-2 IMAGE_THUNK_DATA(IAT2) 4-2-2-1 AddressOfData 5C 20 00 00(*指向IMAGE_IMPORT_BY_NAME的RVA 由于本例子中兩個API函數引自兩天不同DLL,所以要補充00 00 00 00結束 4-2-3 IMAGE_IMPORT_DESCRIPTOR(IID1) 4-2-3-1 OriginalFirstThunk 4C 20 00 00指向輸入名稱表的RVA 4-2-3-2 TimeDateStamp 00 00 00 00 32時間標志 4-2-3-3 ForwarderChain 00 00 00 00被轉向API索引 4-2-3-4 Name 6A 20 00 00 指向DLL名稱的RVA與指針 4-2-3-5 FirstThunk 08 20 00 00 指向輸入地址表IAT的RVA 4-2-4 IMAGE_IMPORT_DESCRIPTOR(IID2) 4-2-3-1 OriginalFirstThunk 54 20 00 00指向輸入名稱表的RVA 4-2-3-2 TimeDateStamp 00 00 00 00 32時間標志 4-2-3-3 ForwarderChain 00 00 00 00被轉向API索引 4-2-3-4 Name 84 20 00 00 指向DLL名稱的RVA與指針 4-2-3-5 FirstThunk 00 20 00 00 指向輸入地址表IAT的RVA 填充20個00h作為結尾標記 4-2-5 IMAGE_THUNK_DATA32(INT1) 4-2-5-1 ForwarderString 5C 20 00 00 (*指向一個轉向字符的RVA) 由于兩個API函數引自兩個不同DLL文件,所以要補充00 00 00 00結束 4-2-6 IMAGE_THUNK_DATA32(INT1) 4-2-6-1 ForwarderString 76 20 00 00(*指向一個轉向符的RVA) 由于兩個API函數引自兩個不同DLL文件,所以要補充00 00 00 00 結束 4-2-7 IMAGE_IMPORT_BY_NAME(1) 4-2-7-1 Hint 00 00此函數所駐留DLL的輸出表序號 4-2-7-2 Name 4D 65 73 73 61 67 65 42 6F 78 41 (MessageBox的16進制代碼,后面跟著此函數的DLL名稱16進制代碼00 75 73 65 72 33 32 2E 64 6C 6C 00 00 4-2-8 IMAGE_IMPORT_BY_NAME(2) 4-2-8-1 Hint 00 00此函數所駐留DLL的輸出表序號 4-2-8-2 Name 45 78 69 74 50 72 6F 63 65 73 73(ExitProcess的16進制代碼)后面跟輸出函數的DLL名稱16進制碼00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 kernel32.dll 填充至00 08 00 00 4-3? .data CF FB CF A2 BF F2 00 48 65 6C 6C 6F 2C 77 6F 72 64 00填充至00 10 00 00 至此第一個首先PE文件完畢,好累呀

?

2-4-2Import Table 2-4-1VirtualAddress 10 20 00 00數據塊的起始RVA 2-4-2 Size 3C 00 00 00 數據塊大小 2-4-3Resorce Table 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小 2-4-4 Exception Table 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小 2-4-5 Security Table 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小 2-4-6Base relocation Table 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小 2-4-7 Debug 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小 2-4-8 CopyRight 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小 2-4-9 Global ptr 2-4-1 VirtualAddress 00 00 00 00數據塊的起始RVA 2-4-2 Size 00 00 00 00 數據塊大小

總結

以上是生活随笔為你收集整理的手写PE文件(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

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