CATS
138.50M · 2026-02-04
int age = 100;
while (true)
{
int* ptr = &age;
Debug.WriteLine((long)ptr);
MessageBox.Show(age.ToString());
}
age 的值age 的地址,所以这里直接使用即可,至于processId 可以在任务管理器中查看DWORD processID = 20996;
HANDLE handle = OpenProcess(PROCESS_VM_READ, FALSE, processID);
char* buffer = (char*)malloc(4);
SIZE_T t;
ReadProcessMemory(handle, 623163987272, buffer, 4, &t);
assert代码,实际开发中不判定win api调用是否成功是一个坏习惯,不要学!!!age的值DWORD processID = 25864;
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID); // 这里用PROCESS_VM_WRITE,WriteProcessMemory会失败
char num = 99;
SIZE_T t = 0;
WriteProcessMemory(handle, 1015761655160, &num, 1, &t);
OpenProcess
HANDLE OpenProcess(
DWORD dwDesiredAccess, // 所需的访问权限
BOOL bInheritHandle, // 是否可以继承句柄
DWORD dwProcessId // 目标进程的 ID
);
dwDesiredAccess
PROCESS_ALL_ACCESS: 访问进程的所有权限。PROCESS_VM_READ: 读取进程的内存。PROCESS_VM_WRITE: 写入进程的内存。bInheritHandle: 这个参数指定是否允许子进程继承句柄。dwProcessId(DWORD 类型)
ReadProcessMemory
BOOL ReadProcessMemory(
HANDLE hProcess, // 目标进程的句柄
LPCVOID lpBaseAddress, // 要读取的内存地址
LPVOID lpBuffer, // 存储读取数据的缓冲区
SIZE_T nSize, // 要读取的字节数
SIZE_T* lpNumberOfBytesRead // 实际读取的字节数
);
WriteProcessMemory
BOOL WriteProcessMemory(
HANDLE hProcess, // 目标进程的句柄
LPVOID lpBaseAddress, // 目标进程中的内存地址
LPCVOID lpBuffer, // 要写入的数据
SIZE_T nSize, // 要写入的数据大小(字节数)
SIZE_T* lpNumberOfBytesWritten // 实际写入的字节数
);