关于VirtualProtect的有关问题

关于VirtualProtect的问题最近看到VirtualProtect这个API,但是自己写的时候却调用不成功...源代码如下:.38

关于VirtualProtect的问题
最近看到VirtualProtect这个API,但是自己写的时候却调用不成功...源代码如下:

.386
.model   flat,   stdcall
option   casemap   :none
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
;   Include   文件定义
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
includewindows.inc
includeuser32.inc
includelibuser32.lib
includekernel32.inc
includelibkernel32.lib
includecomdlg32.inc
includelibcomdlg32.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
invokeExitProcess,NULL
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
endstart

[解决办法]
失败的原因是最后一个参数赋值为null