大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
OpenProcess函数声明如下,失败则返回NULL(0,也就是false)
#include <Windows.h>
HANDLE OpenProcess
(
DWORD desiredAccess,//读取权限
BOOL blnheritHandle,//是否继承
DWORD processId//想要读取的PID
)
代码示例,注意下面的代码可能运行失败,请按照如下设置VS
右键项目名(例如ConsoleApplication123)->属性->配置属性(注意左上角是活动Debug/Debug/Release/所有配置,比如选了Release则在Debug下无效)->链接器->清单文件->UAC执行级别->requireAdministrator
然后关闭visual studio,以管理员身份运行visual studio
#include <iostream>
#include <Windows.h>
int main() {
int pid;
std::cout << "输入PID" << std::endl;//46044
std::cin >> pid;
HANDLE handler=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
if (handler) {
std::cout << "获取句柄成功" << std::endl;
}
else {
std::cout << "获取句柄失败" << std::endl;
}
}
ReadProcessMemory函数声明如下,成功true失败返回false
BOOL ReadProcessMemory
(
HANDLE process,//要读取的句柄
LPCVOID baseAddress,//要读取的地址(我个人觉得就是相对于HANDLE的偏移地址)
LPVOID buffer,//要把读到的数据放到buffer,这是个指针
SIZE_T size,//要读取的数据字节大小
SIZE_T *readSize//接受到的数据大小,可为NULL
)
示例代码,配合OpenProcess使用
#include <iostream>
#include <Windows.h>
int main() {
int pid;
std::cout << "输入PID" << std::endl;//46044
std::cin >> pid;
HANDLE handler=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
if (handler) {
std::cout << "获取句柄成功" << std::endl;
int a = 0;
BOOL result = ReadProcessMemory(handler,(LPCVOID)0x4cef18,&a,4,NULL);
if (result) {
std::cout << "读取数据成功:"<<a << std::endl;
}
else {
std::cout << "读取数据失败" << std::endl;
}
}
else {
std::cout << "获取句柄失败" << std::endl;
}
}
WriteProcessMemory函数声明如下,成功true失败返回false
BOOL ReadProcessMemory
(
HANDLE process,//要写入的句柄
LPVOID baseAddress,//要写入的地址,注意不是LPCVOID(多个C)
LPCVOID buffer,//要写入的数据指针
SIZE_T size,//要写入的数据字节大小
SIZE_T *readSize//实际写入的数据大小,可为NULL
)
示例代码,配合OpenProcess使用
#include <iostream>
#include <Windows.h>
int main() {
int pid;
std::cout << "输入PID" << std::endl;//46044
std::cin >> pid;
HANDLE handler=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
if (handler) {
std::cout << "获取句柄成功" << std::endl;
int a = 666;
while (1) {
BOOL result = WriteProcessMemory(handler, (LPVOID)0x4cef18, &a, 4, NULL);
if (result) {
std::cout << "写入数据666" << std::endl;
}
Sleep(1000);//延迟1000毫秒
}
}
else {
std::cout << "获取句柄失败" << std::endl;
}
}
VirtualAllocEx函数
在指定的线程中开辟内存,下面的示例表示开辟1000个字节的内存(实际上是1000/页大小)
LPVOID lpvoid=VirtualAllocEx(handler, 0, 1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
std::cout << lpvoid << (char)10;
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194599.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...