如何读写一个内存地址数据

ccssddnnsb 2008-06-11 05:37:43
Option Explicit
Dim CsDz As Long
Dim aaa As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
lpClassName As String, ByVal lpWindowName As String) As Long
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const SYNCHRONIZE = &H100000
Private Const PROCESS_ALL_ACCESS As Long = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF
Private Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess _
As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal _
nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As _
Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize _
As Long, lpNumberOfBytesWritten As Long) As Long
Private Sub Command1_Click()
Dim hwnd As Long ' 储存 FindWindow 函数返回的句柄
Dim pid As Long ' 储存进程标识符( Process Id )
Dim pHandle As Long ' 储存进程句柄
hwnd = FindWindow(vbNullString, "Form1")
If (hwnd = 0) Then
MsgBox "未启动"
Exit Sub
End If
GetWindowThreadProcessId hwnd, pid
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then
MsgBox "得不到窗口进程信息"
Exit Sub
End If

CsDz = VarPtr(aaa) 'Csdz就是你要修改的地址
Dim cc As Long '要读取的变量存放’可以是BYTE
ReadProcessMemory pHandle, CsDz, ByVal VarPtr(cc), 4, 0&
Text1 = cc
End Sub

Private Sub Command2_Click()
Dim hwnd As Long ' 储存 FindWindow 函数返回的句柄
Dim pid As Long ' 储存进程标识符( Process Id )
Dim pHandle As Long ' 储存进程句柄
hwnd = FindWindow(vbNullString, "Form1")
If (hwnd = 0) Then
MsgBox "未启动"
Exit Sub
End If
GetWindowThreadProcessId hwnd, pid
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then
MsgBox "得不到窗口进程信息"
Exit Sub
End If
aaa = CLng("&H" & Text2) '写入的数据
CsDz = VarPtr(aaa) 'Csdz就是你要修改的地址
WriteProcessMemory pHandle, CsDz, aaa, 4, 0&
End Sub

Private Sub Form_Load()
Command1.Caption = "读"
Command2.Caption = "写"
End Sub

这是在网上找的一段程序,但不好用。现在我需要操作内存偏移地址 00150AD4,但上面程序中只能接收long类型的,哪位能帮忙看看。需要读取与写入这个内存地址数据。
...全文
226 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lan563 2008-06-14
  • 打赏
  • 举报
回复
Dim bitlong(4) As Byte
ReadProcessMemory pHandle, CsDz, bitlong(0), 4, 0 '读字符串
字符串 = StrConv(bitlong, vbUnicode)
ccssddnnsb 2008-06-14
  • 打赏
  • 举报
回复
Dim bitlong As Byte
ReadProcessMemory pHandle, CsDz, ByVal VarPtr(bitlong), 4, 0 '读字符串
Text1.Text = StrConv(bitlong, vbUnicode)
这样读出来数据只有一个 1
ccssddnnsb 2008-06-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lan563 的回复:]

VB codedim读出的数值aslongdim读出的字符串(长度)asbyteGetWindowThreadProcessId 句柄, PID
pHandle=OpenProcess(PROCESS_VM_OPERATIONOrPROCESS_VM_READOrPROCESS_VM_WRITE,0, PID)
ReadProcessMemory pHandle, 地址, 读出的数值,长度,0'读数值ReadProcessMemory pHandle, 地址, 读出的字符串(),长度,0'读字符串字符串=StrConv(读出的字符串, vbUnicode)

CloseHandle pHandle
[/Quote]
Dim bitlong As Byte
ReadProcessMemory pHandle, CsDz, bitlong, 4, 0 '读字符串
类型不对??????
ccssddnnsb 2008-06-11
  • 打赏
  • 举报
回复
我试试
lan563 2008-06-11
  • 打赏
  • 举报
回复
字体为什么会变成这样子的~~~好胖`~~
lan563 2008-06-11
  • 打赏
  • 举报
回复


dim 读出的数值 as long
dim 读出的字符串(长度) as byte
GetWindowThreadProcessId 句柄, PID
pHandle = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, 0, PID)
ReadProcessMemory pHandle, 地址, 读出的数值,长度, 0 '读数值
ReadProcessMemory pHandle, 地址, 读出的字符串(),长度, 0 '读字符串
字符串 = StrConv(读出的字符串, vbUnicode)

CloseHandle pHandle
ccssddnnsb 2008-06-11
  • 打赏
  • 举报
回复
ReadProcessMemory pHandle, CsDz, ByVal VarPtr(cc), 4, 0&
Text1 = cc
读出数据还有问题,这里读出的是16进制数据只有最后两位 99264=000183C0 但只能显示C0
ccssddnnsb 2008-06-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chenjl1031 的回复:]
晕,错了.应该是CopyMemory
[/Quote]
怎么用
fvflove 2008-06-11
  • 打赏
  • 举报
回复
你将代码改为这样看看.

Option Explicit
Dim CsDz As Long
Dim aaa As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
lpClassName As String, ByVal lpWindowName As String) As Long
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const SYNCHRONIZE = &H100000
Private Const PROCESS_ALL_ACCESS As Long = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF
Private Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess _
As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal _
nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As _
Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize _
As Long, lpNumberOfBytesWritten As Long) As Long
Private Sub Command1_Click()
Dim hwnd As Long ' 储存 FindWindow 函数返回的句柄
Dim pid As Long ' 储存进程标识符( Process Id )
Dim pHandle As Long ' 储存进程句柄
hwnd = FindWindow(vbNullString, "Form1")
If (hwnd = 0) Then
MsgBox "未启动"
Exit Sub
End If
GetWindowThreadProcessId hwnd, pid
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then
MsgBox "得不到窗口进程信息"
Exit Sub
End If

CsDz = CDbl("&H" & Text2) 'Csdz就是你要修改的地址
Dim cc As Byte '要读取的变量存放’可以是BYTE
ReadProcessMemory pHandle, CsDz, ByVal VarPtr(cc), 4, 0&
Text1 = Hex(cc)
End Sub

Private Sub Command2_Click()
Dim hwnd As Long ' 储存 FindWindow 函数返回的句柄
Dim pid As Long ' 储存进程标识符( Process Id )
Dim pHandle As Long ' 储存进程句柄
hwnd = FindWindow(vbNullString, "Form1")
If (hwnd = 0) Then
MsgBox "未启动"
Exit Sub
End If
GetWindowThreadProcessId hwnd, pid
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then
MsgBox "得不到窗口进程信息"
Exit Sub
End If
aaa = "&H" & Text1 '写入的数据
CsDz = CDbl("&H" & Text2) 'Csdz就是你要修改的地址
WriteProcessMemory pHandle, CsDz, ByVal VarPtr(aaa), 4, 0&
End Sub

Private Sub Form_Load()
Command1.Caption = "读"
Command2.Caption = "写"
End Sub
东方之珠 2008-06-11
  • 打赏
  • 举报
回复
晕,错了.应该是CopyMemory
东方之珠 2008-06-11
  • 打赏
  • 举报
回复
用API函数RtlCompareMemory即可.
迈克揉索芙特 2008-06-11
  • 打赏
  • 举报
回复
&H00150AD4 这样就是long类型了

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧