windows平台,c++用控制台,输入某个程序的pid后自动获取该程序内存地址的开始地址和结束地址,(注意不是获取自身的内存,是根据pid获取其他进程的),并遍历输出内存地址和字节,以及内存数据,效果如图,注意是获取其他程序的内存地址
C++根据pid内存遍历列举
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 快撑死的鱼 2023-01-25 13:58关注
回答不易,求求您采纳点赞哦
在Windows平台上使用C++根据进程的PID遍历进程的内存,可以使用以下步骤:
使用 OpenProcess 函数打开具有给定 PID 的进程的句柄。
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid);
使用 VirtualQueryEx 函数获取进程内存区域的起始地址和结束地址。
MEMORY_BASIC_INFORMATION mbi; char buffer[4096]; SIZE_T bytesRead; for (LPVOID lpMem = 0; VirtualQueryEx(hProcess, lpMem, &mbi, sizeof(mbi)) == sizeof(mbi); lpMem = (LPVOID)((DWORD)mbi.BaseAddress + mbi.RegionSize)) { //start address: mbi.BaseAddress //end address: (LPVOID)((DWORD)mbi.BaseAddress + mbi.RegionSize) }
使用ReadProcessMemory函数读取进程的内存,获取内存数据。
ReadProcessMemory(hProcess, mbi.BaseAddress, buffer, mbi.RegionSize, &bytesRead);
您可以使用 cout 或任何其他方法输出内存地址和字节以及内存数据。
cout << "Memory address: " << mbi.BaseAddress << endl; cout << "Memory bytes: " << bytesRead << endl; cout << "Memory data: " << buffer << endl;
重要的是要注意,当您尝试访问其他进程的内存时,您需要具有必要的权限。否则,该函数将失败并返回错误。
此外,正确处理错误也很重要,因为某些内存区域可能无法读取。
还值得注意的是,这是一个简化的示例,在真实场景中,您需要处理错误、添加更多检查并考虑安全性和其他因素。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 Vue3 大型图片数据拖动排序
- ¥15 划分vlan后不通了
- ¥15 GDI处理通道视频时总是带有白色锯齿
- ¥20 用雷电模拟器安装百达屋apk一直闪退
- ¥15 算能科技20240506咨询(拒绝大模型回答)
- ¥15 自适应 AR 模型 参数估计Matlab程序
- ¥100 角动量包络面如何用MATLAB绘制
- ¥15 merge函数占用内存过大
- ¥15 使用EMD去噪处理RML2016数据集时候的原理
- ¥15 神经网络预测均方误差很小 但是图像上看着差别太大