WIN32汇编语言教程:第17章 PE文件 · 17.1 PE文件的结构(6)
4. PEInfo例子
好了,到现在为止,相信读者对PE文件的结构应该有初步的了解了,现在尝试写一个程序来查看PE文件的一些信息,并列出所有节的名称和属性。例子代码在本书所附光盘的Chapter17\PeInfo目录中,其中包括资源文件Main.rc,界面源代码Main.asm和处理分析PE文件的源代码_ProcessPeFile.asm。为了节省篇幅,本章以后的几个例子中都将使用同样的界面文件Main.asm和Main.rc,仅仅是处理PE文件的代码_ProcessPeFile.asm有所不同。
通用的界面资源文件Main.rc定义如下:
//################################################################## #include <resource.h> //################################################################## #define ICO_MAIN 1000 #define DLG_MAIN 1000 #define IDC_INFO 1001 #define IDM_MAIN 2000 #define IDM_OPEN 2001 #define IDM_EXIT 2002 //################################################################## ICO_MAIN ICON "Main.ico" //################################################################## DLG_MAIN DIALOG 50, 50, 250, 140 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "PE文件基本信息" MENU IDM_MAIN FONT 9, "宋体" { CONTROL "", IDC_INFO, "RichEdit20A", 196 | ES_WANTRETURN | WS_CHILD | ES_READONLY | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 0, 0, 249, 140 } //################################################################## IDM_MAIN menu discardable BEGIN popup "文件(&F)" BEGIN menuitem "打开文件(&O)...", IDM_OPEN menuitem separator menuitem "退出(&X)", IDM_EXIT END END //##################################################################
文件中定义了一个作为主窗口的对话框,对话框上定义了一个菜单以及用来输出信息的RichEdit控件,实际运行的效果如图17.4所示。
图17.4 PEInfo例子的运行界面
处理界面的汇编源文件Main.asm的内容如下:
.386 .model flat, stdcall option casemap :none ;#################################################################### ; Include 文件定义 ;#################################################################### include windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib include comdlg32.inc includelib comdlg32.lib ;#################################################################### ; Equ 等值定义 ;#################################################################### ICO_MAIN equ 1000 DLG_MAIN equ 1000 IDC_INFO equ 1001 IDM_MAIN equ 2000 IDM_OPEN equ 2001 IDM_EXIT equ 2002 ;#################################################################### ; 数据段 ;#################################################################### .data? hInstance dd ? hRichEdit dd ? hWinMain dd ? hWinEdit dd ? szFileName db MAX_PATH dup (?) .const szDllEdit db 'RichEd20.dll',0 szClassEdit db 'RichEdit20A',0 szFont db '宋体',0 szExtPe db 'PE Files',0,'*.exe;*.dll;*.scr;*.fon;*.drv',0 db 'All Files(*.*)',0,'*.*',0,0 szErr db '文件格式错误!',0 szErrFormat db '这个文件不是PE格式的文件!',0 ;#################################################################### ; 代码段 ;#################################################################### .code ;#################################################################### _AppendInfo proc _lpsz local @stCR:CHARRANGE pushad invoke GetWindowTextLength,hWinEdit mov @stCR.cpMin,eax mov @stCR.cpMax,eax invoke SendMessage,hWinEdit,EM_EXSETSEL,0,addr @stCR invoke SendMessage,hWinEdit,EM_REPLACESEL,FALSE,_lpsz popad ret _AppendInfo endp ;#################################################################### include _ProcessPeFile.asm
上页:第17章 PE文件 · 17.1 PE文件的结构(5) 下页:第17章 PE文件 · 17.1 PE文件的结构(7)
第17章 PE文件
版权所有 © 云南伯恩科技 证书:粤ICP备09170368号