最近看到VirtualProtect这个API,但是自己写的时候却调用不成功...源代码如下:
.386
.model flat, stdcall
option casemap :none
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
; Include 文件定义
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include comdlg32.inc
includelib comdlg32.lib
;*****************************************
.data?
lpAdd dd ?
lpMem dd ?
;.............................................
.code
start:
invoke VirtualAlloc,NULL,4096,MEM_RESERVE,PAGE_NOACCESS
.if eax
mov lpAdd,eax
.endif
invoke VirtualAlloc,lpAdd,4096,MEM_COMMIT,PAGE_READWRITE
.if eax
mov lpMem,eax
.endif
;就是这里了,总是调用失败 -_-!
invoke VirtualProtect,lpAdd,4096,PAGE_READONLY,NULL
invoke ExitProcess,NULL
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
end start
------解决方案--------------------------------------------------------
失败的原因是最后一个参数赋值为null