前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >createprocess error=2_CreateProcess

createprocess error=2_CreateProcess

作者头像
全栈程序员站长
发布2022-10-01 16:27:07
4440
发布2022-10-01 16:27:07
举报

大家好,又见面了,我是你们的朋友全栈君。

OpenProcess函数声明如下,失败则返回NULL(0,也就是false)

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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

代码语言:javascript
复制
BOOL ReadProcessMemory
(
HANDLE process,//要读取的句柄
LPCVOID baseAddress,//要读取的地址(我个人觉得就是相对于HANDLE的偏移地址)
LPVOID buffer,//要把读到的数据放到buffer,这是个指针
SIZE_T size,//要读取的数据字节大小
SIZE_T *readSize//接受到的数据大小,可为NULL
)

示例代码,配合OpenProcess使用

代码语言:javascript
复制
#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

代码语言:javascript
复制
BOOL ReadProcessMemory
(
HANDLE process,//要写入的句柄
LPVOID baseAddress,//要写入的地址,注意不是LPCVOID(多个C)
LPCVOID buffer,//要写入的数据指针
SIZE_T size,//要写入的数据字节大小
SIZE_T *readSize//实际写入的数据大小,可为NULL
)

示例代码,配合OpenProcess使用

代码语言:javascript
复制
#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/页大小)

代码语言:javascript
复制
LPVOID lpvoid=VirtualAllocEx(handler, 0, 1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
std::cout << lpvoid << (char)10;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/194599.html原文链接:https://javaforall.cn

本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月12日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com