VB 读写内存
一些背景知识:
不象 C 语音,VB 不会自动包括普通的 API 函数的声明,因此我们必须把他们加入我们的
项目文件。在几乎所有的修改器中会使用到 6 个主要的函数,讨论如下:
1. FindWindow(ClassName, WindowTitle) - FindWindow 返 回 符 合 指 定 的 类 名
( ClassName
)和窗口名( WindowTitle )的窗口句柄。对我们来说,可以让 ClassName 为空( Null ),
只给出游戏的
WindowTitle 。函 数应该 这样声 明: Declare Function FindWindow Lib "user32"
Alias
"FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String)
As Long
2. GetWindowThreadProcessId(WindowHandle, ProcessId) - 在 这 里 我 们 把
FindWindow
函数中得到的句柄作为参数,来获得进程标识符(ProcessId )。声明如下: Declare
Function
GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId
As Long) As Long
3. OpenProcess(DesiredAccess, Inherit, ProcessId) -
这 个 函 数 将 返 回 一 个 我 们 目 标 进 程 的 句 柄 , 可 以 用 来 对 目 标 进 行 读 写 操 作 。
DesiredAccess
参数的值决定了句柄对进程的存取权利,对我们来说,要使用 PROCESS_ALL_ACCESS
(完全存取权限)。Inherit 应该总是
False 。 ProcessId 是 从 GetWindowThreadProcessId 函 数 中 取 得 的 。 Declare
Function
OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal
bInheritHandle As Long, ByVal dwProcessId As Long) As Long
4. CloseHandle(ProcessHandle) - 每一 个打 开的句 柄必 须呼 叫这 个函数 来关 闭。
Declare Function
CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
5. WriteProcessMemory(ProcessHandle, Address, value, Sizeofvalue,
BytesWritten) - 把 指定 的 值 value 写 入由 Address 指 定 的 目标 地 址 。 Declare
Function
WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal
lpBaseAddress As Any, ByVal lpBu:er As Any, ByVal nSize As Long,
lpNumberOfBytesWritten As Long) As Long
6. ReadProcessMemory(ProcessHandle, Address, value, Sizeofvalue,
BytesWritten) - 把 Address 指定的目标地址的值存入 value 位置的变量中。 Declare
Function
WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal
lpBaseAddress As Any, ByVal lpBu:er As Any, ByVal nSize As Long,
lpNumberOfBytesWritten As Long) As Long