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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

图解用工具对PE文件格式做初步研究

發布時間:2025/4/14 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解用工具对PE文件格式做初步研究 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

工具:

PETool,MiniHex,PEViewer

以本機notepad.exe為研究對象。本機64位,該notepad.exe是64位應用程序。

1 用peviewer打開

PE文件大體包括四部分,DOS頭,NT頭,節表以及具體的節。下圖展示的是前三部分。


2 DOS頭

e_magic:一個WORD類型,值是一個常數0x4D5A,用文本編輯器查看該值位‘MZ’,可執行文件必須都是'MZ'開頭。

e_lfanew:為32位可執行文件擴展的域,用來表示DOS頭之后的NT頭相對文件起始地址的偏移。

看下圖左方給出的e_lfanew為0x000000E8,在下圖右方找到此地址,如右方000000E0所示行的光標處;

起始四個字節是50 45 00 00,和右圖的PE頭的Signature相符合;



3 文件頭

PE文件頭的定義:

typedef struct _IMAGE_FILE_HEADER { ?
? ? WORD ? ?Machine; ?
? ? WORD ? ?NumberOfSections; ?
? ? DWORD ? TimeDateStamp; ?
? ? DWORD ? PointerToSymbolTable; ?
? ? DWORD ? NumberOfSymbols; ?
? ? WORD ? ?SizeOfOptionalHeader; ?
? ? WORD ? ?Characteristics; ?
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; ?

Machine:該文件的運行平臺,是x86、x64還是I64等等,可以是下面值里的某一個。
NumberOfSections:該PE文件中有多少個節,也就是節表中的項數。
TimeDateStamp:PE文件的創建時間,一般有連接器填寫。

對照下圖左方顯示和右方光標處,其內容相符合;







4 導入表

自己算下導入表的起始地址,比較難算;用工具看下,如下圖;導入表起始地址是

0x00000178


peviewer給出的導入表內容;


看16進制文件中的00000178,與peviewer給出的似乎不符,不過此處還不太理解;


16進制文件和PETool給出的內容是相符合的;

5 導入表中的函數名

試著找下導入的SetWindowText函數的名字在16進制文件中的位置;


什么是Thunk RVA,對相關計算尚不太熟悉;

直接找到0000D640處看看,不是SetWindowText;


用搜索功能找SetWindowText;在如下位置;這個RVA的計算是比較復雜;以后再搞;



鏈接

http://www.pediy.com/kssd/tutorial/chap8-1-6.htm
http://blog.csdn.net/evileagle/article/details/11693499

總結

以上是生活随笔為你收集整理的图解用工具对PE文件格式做初步研究的全部內容,希望文章能夠幫你解決所遇到的問題。

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