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

📄 first.asm

📁 windows下汇编语言 学习汇编语言好助手
💻 ASM
字号:
;****************************************
;文件:First.ASM                        *
;功能:利用内存映射文件进行             *
;      进程间通讯之程序1                *      
;****************************************
IDC_EDITTEXT  = 100		;EDIT控制的ID

.386p
.model flat,stdcall		;平坦内存模式,标准调用约定
include win32.inc		;包含有WIN32部分常量定义的文件
extrn CreateFileA:proc
extrn CreateFileMappingA:proc
extrn OpenFileMappingA:proc
extrn MapViewOfFile:proc
extrn UnmapViewOfFile:proc
extrn CloseHandle:proc
extrn MessageBoxA:proc
extrn ExitProcess:proc
extrn GetModuleHandleA:proc
extrn DialogBoxParamA:proc
extrn EndDialog:Proc
extrn SetDlgItemTextA:proc
extrn SetTimer:proc
extrn KillTimer:proc

NULL  = 0
MB_OK = 0
INVALID_HANDLE_VALUE = -1
GENERIC_READ  = 80000000H
GENERIC_WRITE = 40000000H
FILE_SHARE_READ   = 1
FILE_SHARE_WRITE  = 2
FILE_SHARE_DELETE = 4
CREATE_ALWAYS     = 2
PAGE_READWRITE         =  04H
FILE_ATTRIBUTE_NORMAL  = 00000080H
READ_CONTROL              = 00020000H
STANDARD_RIGHTS_REQUIRED  = 000F0000H
SECTION_QUERY       = 0001H
SECTION_MAP_WRITE   = 0002H
SECTION_MAP_READ    = 0004H
SECTION_MAP_EXECUTE = 0008H
SECTION_EXTEND_SIZE = 0010H
SECTION_ALL_ACCESS  = STANDARD_RIGHTS_REQUIRED OR SECTION_QUERY OR SECTION_MAP_WRITE OR SECTION_MAP_READ OR SECTION_MAP_EXECUTE OR SECTION_EXTEND_SIZE
FILE_MAP_COPY       = SECTION_QUERY
FILE_MAP_WRITE      = SECTION_MAP_WRITE
FILE_MAP_READ       = SECTION_MAP_READ
FILE_MAP_ALL_ACCESS = SECTION_ALL_ACCESS

COUNT = 200

.data 
	DialogName	db 'MyDialog',0
	CaptionFail	db '失败!',0
	TextFail	db 'API:DialogBoxParamA调用失败!',0
	TEXT		db '河汉清且浅,相去复几许。',0
	TextLen = $-TEXT
	
	ErrCaption db '错误',0
	ErrText	   db '发生错误',0
	
	FileName	db 'Mapping.dat'
	hFile	 	dd ?
	hMapping 	dd ?
	pMapView 	dd ?
	MappingName db 'MyMappingName',0	
	
.code
;主过程
Start:
	call GetModuleHandleA,0		;取得模块句柄,返回结果在eax中
	;调用DialogBoxParamA显示对话框
	call DialogBoxParamA,eax,offset DialogName,0,offset DialogProc,0
	cmp  eax,0					;成功否?
	jnz  Exit					;成功则退出
	;显示出错信息
	call MessageBoxA,0,offset TextFail,offset CaptionFail,MB_OK
Exit:
	call ExitProcess,0			;退出进程
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++
;对话框消息处理过程	
DialogProc  proc uses ebx edi esi, hWnd:DWORD, wMsg:DWORD, wParam:DWORD, lParam:DWORD
	cmp wMsg,WM_INITDIALOG
	jz  WmInitDialog
	cmp wMsg,WM_CLOSE
	jz  WmClose
	cmp wMsg,WM_COMMAND
	jz  WmCommand
	cmp wMsg,WM_TIMER
	jz  WmTimer
	jmp ExitProc
WmInitDialog:				;对话框初始化处理
	call DlgInit,hWnd
	jmp  ExitProc
WmClose:					;用户按下了Alt-F4或单击右上角X按扭
	call DlgClose,hWnd
	jmp  ExitProc
WmTimer:
	call SetDlgItemTextA,hWnd,IDC_EDITTEXT,pMapView
	jmp  ExitProc	
WmCommand:
	mov  ebx,wParam
	cmp  bx,IDOK			;是按下了“退出”键?
	jnz  ExitProc
	call DlgClose,hWnd
	jmp  ExitProc
ExitProc:					;退出消息处理
	xor  eax,eax
	ret
DialogProc endp	

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++
DlgInit proc, hWnd:DWORD
	call CreateFileA,offset FileName,GENERIC_WRITE OR GENERIC_READ,FILE_SHARE_READ OR FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
	mov  [hFile],eax
	cmp  eax,INVALID_HANDLE_VALUE
	jz   Error
	call CreateFileMappingA,[hFile],NULL,PAGE_READWRITE,0,COUNT,offset MappingName
	mov  [hMapping],eax
	cmp  eax,NULL
	jz   Error
	call MapViewOfFile,[hMapping],FILE_MAP_ALL_ACCESS,0,0,COUNT
	mov  [pMapView],eax
	cmp  eax,NULL
	jz   Error
	
	mov  edi,eax
	mov  esi,offset TEXT
	mov  ecx,TextLen
	cld
	rep  movsb
	
	call SetTimer,hWnd,12345,500,NULL	;设置定时器
	ret
Error:
	call MessageBoxA,NULL,offset ErrText,offset ErrCaption,MB_OK
	call DlgClose
	ret
DlgInit endp
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++
DlgClose proc, hWnd:DWORD
	call KillTimer,hWnd,12345			;删除定时器
	call UnmapViewOfFile,[pMapView]
	call CloseHandle,[hMapping]
	call CloseHandle,[hFile]

	call EndDialog,hWnd,1				;关闭对话框
	ret
DlgClose endp
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++

	end Start

⌨️ 快捷键说明

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