能力值:
(RANK:410 )
2 楼
fnReadInteger PROC hProcess:DWORD,lpBaseAddress:WORD,nSize:BYTE
.data?
lpBuffer db ?
.code
invoke ReadProcessMemory,hProcess,lpBaseAddress,addr lpBuffer,nSize,NULL
lea eax,lpBuffer
ret
fnReadInteger ENDP
能力值:
( LV12,RANK:330 )
3 楼
这么简单?
能力值:
( LV9,RANK:380 )
4 楼
.data?
szBuff db 1024 dup(?) ;定义一个全局变量,然后把数据copy到这里就行
.
.
fnReadInteger PROC hProcess:DWORD,lpBaseAddress:WORD,nSize:BYTE
local lpBuffer[1024]:byte
invoke ReadProcessMemory,hProcess,lpBaseAddress,addr lpBuffer,nSize,NULL
invoke RtlMoveMemory,addr szBuff,addr lpBuffer,sizeof lpBuffer
ret
fnReadInteger ENDP
能力值:
(RANK:410 )
5 楼
嗯,就是这样。函数返回那个缓冲区地址就行了,如果为了保险,还可以在函数里判断一下。
fnReadInteger PROC hProcess:DWORD,lpBaseAddress:WORD,nSize:BYTE
.data?
lpBuffer db ?
.code
invoke ReadProcessMemory,hProcess,lpBaseAddress,addr lpBuffer,nSize,NULL
.if eax ; 如果返回成功则返回lpBuffer缓冲区指针,否则返回FALSE
lea eax,lpBuffer
ret
.endif
ret
fnReadInteger ENDP
不过如果lpBuffer是局部变量而不是全局变量就不行了。只有想办法申请一个全局变量将数据拷贝到全局变量再返回这个全局变量地址,或用内存管理函数申请一个动态内存,返回后取出数据再释放这个地址内存。
能力值:
( LV12,RANK:330 )
6 楼
恩,不错,谢谢2位了!