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

📄 filemap.asm

📁 windows下汇编语言 学习汇编语言好助手
💻 ASM
字号:
;******************************
;文件:FileMap.asm            *
;功能:演示内存映射文件的使用 *
;******************************
.386p
.model flat,stdcall
;外部过程声明
extrn CreateFileA:proc
extrn CreateFileMappingA:proc
extrn MapViewOfFile:proc
extrn UnmapViewOfFile:proc
extrn CloseHandle:proc
extrn ExitProcess:proc
extrn MessageBoxA: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 = 26
.data
	ErrCaption db '错误',0
	ErrText	   db '发生错误',0
	
	FileName db 'Mapping.dat'
	hFile	 dd ?
	hMapping dd ?
	pMapView dd ?

.code
main:
	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,NULL
	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  ecx,COUNT					;写入内存映射文件
	mov  esi,eax
	mov  al,'A'
write:
	mov  byte ptr [esi],al
	inc  esi
	inc  al
	loop write

	call UnmapViewOfFile,[pMapView]	;取消映射
	cmp  eax,0
	jz   Error
Exit:
	call CloseHandle,[hMapping]		;关闭文件及映射句柄
	call CloseHandle,[hFile]
	call ExitProcess,0
Error:
	call MessageBoxA,NULL,offset ErrText,offset ErrCaption,MB_OK
	jmp  Exit

	end main

⌨️ 快捷键说明

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