windows-遍历另一进程内存根据进程PID
- 2019 年 12 月 26 日
- 笔记
#include <windows.h> //OpenProcess需要提权,因为代码常用抠出来的所有没有提权. BOOL iteratorMemory(DWORD dwPid) { if (dwPid == 0 || dwPid == 4) return FALSE; HANDLE hProcess = 0; DWORD dwTempSize = 0; hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPid); if (!hProcess) { return FALSE; } PMEMORY_BASIC_INFORMATION pMemInfo = new MEMORY_BASIC_INFORMATION(); DWORD dwErrorCode; dwErrorCode = VirtualQueryEx(hProcess, 0, pMemInfo, sizeof(MEMORY_BASIC_INFORMATION)); if (0 == dwErrorCode) { return FALSE; } // pMeminfo->Regionsize 代表当前遍历出的内存大小 for (__int64 i = pMemInfo->RegionSize; i < (i + pMemInfo->RegionSize); i += pMemInfo->RegionSize) { dwErrorCode = VirtualQueryEx(hProcess, (LPVOID)i, pMemInfo, sizeof(MEMORY_BASIC_INFORMATION)); if (0 == dwErrorCode) break; if (pMemInfo->State != MEM_COMMIT) //判断提交状态 continue; if (pMemInfo->Protect != PAGE_READWRITE) //判断内存属性 { continue; } if (pMemInfo->Type != MEM_PRIVATE) //判断类型 映射 私有 xxx { continue; } continue; } return FALSE; }
原理: 原理主要是 使用 ** VirtualQueryEx ** 函数. 函数遍历之后会将内存信息反馈到一个Buf中.这个Buf是个结构体 ** PMEMORY_BASIC_INFORMATION **