作者changjeimin (小张)
看板Visual_Basic
标题[.NET] 有关於WriteProcessMemory API 使用问题
时间Fri Jun 25 18:24:10 2010
请教各位前辈们,
我用VB 2008 版本
使用的 读写记忆体 的 API 函数宣告如下
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As
Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal
nSize As Integer, ByVal lpNumberOfBytesWritten As Integer) As Integer
Public Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess
As Integer, ByVal lpBaseAddress As Integer, ByVal lpBuffer() As Byte, ByVal
nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
我一直以来总有个疑问(我是不懂中 硬去使用他)
在 RPM 的 ByRef lpBuffer As Integer 如果把他改成 ByVal
在使用这个函数时候会变成 受限制的记忆体 的错误讯息
而 WPM 的同样参数 却 不能用 Integer 去作写入
变成必须要用 阵列方式 且还要用 Byte 去作写入才能正常
这两个函数是我一直以来总是不明了的问题
明明 参数都一样 为何使用方式却不一样?
如果程式码 写法如下
n =4
ReadProcessMemory (hProcess, lBassAddr, s(0), n, 0&)
For i = 0 To n - 1
Listbox1.Items.add ("位址:" & (i + lBassAddr) & "= " & s(i))
Next
则在listbox 中只会显示 S(0) 的数值 且会出错
如果在 VB6 中 却可以正常显示 S(0~3) 的 byte
上面的程式码 是我已经改成 .net 版本
如果原始的 VB6 写法是这样
ReadProcessMemory hProcess, ByVal lBassAddr, s(0), n, ByVal 0&
For i = 0 To n - 1
List2.AddItem "位址:" & (i + lBassAddr) & "= " & s(i)
Next
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.42.63.89