怎么样使读取内存出来的是数字Private Sub Timer1_Timer()Dim pHandle As LongD

怎么样使读取内存出来的是数字
Private Sub Timer1_Timer()
Dim pHandle As Long
Dim str as Long
pHandle = OpenProcess(PROCESS_ALL_ACCESS,False,pid)
If (pHandle = 0) Then Exit Sub
ReadProcessMemory pHandle,&H841048,str,4,0&
txtDisplay.text = str
CloseHandle hProcess
End Sub
我这样写str总是0,pHandle是正确的,地址也是正确的,我的问题是想读取那个地址的值(数字),我用CE读出来是数字,还有如果是负数的话CE显示的是很大的数,
如果写成
Private Sub Timer1_Timer()
Dim pHandle As Long
Dim str As String * 20
pHandle = OpenProcess(PROCESS_ALL_ACCESS,False,pid)
If (pHandle = 0) Then Exit Sub
ReadProcessMemory pHandle,&H841040,str,20,0&
txtDisplay = Asc(str)
CloseHandle hProcess
End Sub
可以读取,但是超过128就读取不了
lylileon 1年前 已收到1个回答 举报

KFCRAIN 幼苗

共回答了14个问题采纳率:100% 举报

BOOL WINAPI ReadProcessMemory(
__in HANDLE hProcess,
__in LPCVOID lpBaseAddress,
__out LPVOID lpBuffer,
__in SIZE_T nSize,
__out SIZE_T *lpNumberOfBytesRead
);
因此,你的代码应为:
Private Sub Timer1_Timer()
Dim pHandle As Long
Dim buf As Long
pHandle = OpenProcess(PROCESS_ALL_ACCESS,False,pid)
If (pHandle = 0) Then Exit Sub
ReadProcessMemory pHandle,&H841040,byval varptr(buf),4,0&
txtDisplay = CStr(buf)
CloseHandle hProcess
End Sub
这里是读一个Long的长度
如果要读取一组内存数据到一个数组,则为:
Private Sub Timer1_Timer()
Dim pHandle As Long
Dim buf() As Byte
Const Size as long=20 '20 bytes
redim buf(0 to size-1)
pHandle = OpenProcess(PROCESS_ALL_ACCESS,False,pid)
If (pHandle = 0) Then Exit Sub
ReadProcessMemory pHandle,&H841040,byval varptr(buf(0)),size,0&
'此时,buf(0 To (Size-1))保存了内存偏移量0x841040中Size大小的数据
CloseHandle hProcess
End Su

1年前

2
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.023 s. - webmaster@yulucn.com