⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _processpefile.asm

📁 Windows环境下32位汇编语言程序设计 第二版
💻 ASM
字号:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Peinfo 例子的 PE文件处理模块
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		.const
szMsg		db	'文件名:%s',0dh,0ah
		db	'----------------------------------------------------------',0dh,0ah
		db	'运行平台:          0x%04X',0dh,0ah
		db	'节区数量:          %d',0dh,0ah
		db	'文件标记:          0x%04X',0dh,0ah
		db	'建议装入地址:      0x%08X',0dh,0ah,0ah,0
szMsgSection	db	'----------------------------------------------------------',0dh,0ah
		db	'节区名称  节区大小  虚拟地址  Raw_尺寸  Raw_偏移  节区属性',0dh,0ah
		db	'----------------------------------------------------------',0dh,0ah,0
szFmtSection	db	'%s  %08X  %08X  %08X  %08X  %08X',0dh,0ah,0

		.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcessPeFile	proc	_lpFile,_lpPeHead,_dwSize
		local	@szBuffer[1024]:byte,@szSectionName[16]:byte

		pushad
		mov	edi,_lpPeHead
		assume	edi:ptr IMAGE_NT_HEADERS
;********************************************************************
; 显示 PE 文件头中的一些信息
;********************************************************************
		movzx	ecx,[edi].FileHeader.Machine
		movzx	edx,[edi].FileHeader.NumberOfSections
		movzx	ebx,[edi].FileHeader.Characteristics
		invoke	wsprintf,addr @szBuffer,addr szMsg,\
			addr szFileName,ecx,edx,ebx,\
			[edi].OptionalHeader.ImageBase
		invoke	SetWindowText,hWinEdit,addr @szBuffer
;********************************************************************
; 循环显示每个节区的信息
;********************************************************************
		invoke	_AppendInfo,addr szMsgSection
		movzx	ecx,[edi].FileHeader.NumberOfSections
		add	edi,sizeof IMAGE_NT_HEADERS
		assume	edi:ptr IMAGE_SECTION_HEADER
		.repeat
			push	ecx
;********************************************************************
; 节区名称
;********************************************************************
			invoke	RtlZeroMemory,addr @szSectionName,sizeof @szSectionName
			push	esi
			push	edi
			mov	ecx,8
			mov	esi,edi
			lea	edi,@szSectionName
			cld
			@@:
			lodsb
			.if	! al
				mov	al,' '
			.endif
			stosb
			loop	@B
			pop	edi
			pop	esi
;********************************************************************
			invoke	wsprintf,addr @szBuffer,addr szFmtSection,\
				addr @szSectionName,[edi].Misc.VirtualSize,\
				[edi].VirtualAddress,[edi].SizeOfRawData,\
				[edi].PointerToRawData,[edi].Characteristics
			invoke	_AppendInfo,addr @szBuffer
			add	edi,sizeof IMAGE_SECTION_HEADER
;********************************************************************
			pop	ecx
		.untilcxz
		assume	edi:nothing
		popad
		ret

_ProcessPeFile	endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -