📄 virtual.asm
字号:
;*************************
;文件:Virtual.asm *
;功能:使用虚拟内存 *
;*************************
.386p
.model flat,stdcall ;平坦内存模式,标准调用
;常量定义
NULL = 0
MB_OK = 0
MEM_RESERVE = 2000H
MEM_COMMIT = 1000H
MEM_DECOMMIT = 4000H
MEM_RELEASE = 8000H
MEM_FREE = 10000H
MEM_PRIVATE = 20000H
MEM_MAPPED = 40000H
MEM_RESET = 80000H
MEM_TOP_DOWN = 100000H
MEM_IMAGE = 1000000H
PAGE_NOACCESS = 01H
PAGE_READONLY = 02H
PAGE_READWRITE = 04H
PAGE_WRITECOPY = 08H
PAGE_EXECUTE = 10H
PAGE_EXECUTE_READ = 20H
PAGE_EXECUTE_READWRITE = 40H
PAGE_EXECUTE_WRITECOPY = 80H
PAGE_GUARD = 100H
PAGE_NOCACHE = 200H
;外部过程声明
EXTRN VirtualAlloc :PROC
EXTRN VirtualFree :PROC
EXTRN VirtualLock :PROC
EXTRN VirtualProtect :PROC
EXTRN VirtualProtectEx :PROC
EXTRN VirtualQuery :PROC
EXTRN VirtualQueryEx :PROC
EXTRN VirtualUnlock :PROC
EXTRN MessageBoxA: PROC
EXTRN ExitProcess: PROC
.data
ErrCaption db 'Error',0
ErrText db '错误!',0
lpMem dd ?
.code
main:
;保留
call VirtualAlloc,NULL,4096*3,MEM_RESERVE,PAGE_READWRITE
mov [lpMem],eax
or eax,eax
jz Error
;分配
mov ebx,[lpMem]
add ebx,4096
call VirtualAlloc,ebx,4096,MEM_COMMIT,PAGE_READWRITE
or eax,eax
jz Error
mov [eax],12345678H
;释放
call VirtualFree,[lpMem],NULL,MEM_RELEASE
or eax,eax
jz Error
call ExitProcess,0
Error:
call MessageBoxA,NULL,offset ErrText,offset ErrCaption,MB_OK
call ExitProcess,1
end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -