📄 filemap.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 + -