如題,想得到具體地址,不要占用率。
比如0x00000到0x0000f空閑,0x00fff到0x0ffff占用。
求大神解答!(最好是windows,linux也行)
uj5u.com熱心網友回復:
#include <stdint.h>
#include <windows.h>
// 記憶體分頁大小 (4K)
#define PAGE_SIZE 4096
// [PM_START_ADDRESS, PM_END_ADDRESS) 為32位行程可訪問的虛擬地址空間
#define PM_START_ADDRESS 0x10000
#define PM_END_ADDRESS 0x7FFF0000
int main(int argc, char *argv[])
{
// 行程ID
uint32_t pid = 13236;
// 打開行程
HANDLE hProcess = OpenProcess(PROCESS_VM_READ, false, pid);
if (hProcess) {
// 緩沖區
char *page = malloc(PAGE_SIZE);
if (!page) {
CloseHandle(hProcess);
return -1;
}
// 測驗行程記憶體可讀取范圍
uint64_t start = 0;
uint64_t end = PM_START_ADDRESS;
for (; end<PM_END_ADDRESS; end+=PAGE_SIZE) {
// 讀取成功
if (ReadProcessMemory(hProcess, (LPCVOID)end, page, PAGE_SIZE, NULL)) {
if (!start) start = end;
}
// 讀取失敗
else {
if (start) {
printf("0x%llX - 0x%llX \n", start, end);
start = 0;
}
}
}
if (start) printf("0x%llX - 0x%llX \n", start, end);
free(page);
CloseHandle(hProcess);
}
return 0;
}
我只能想到這個方法了,期待樓下更好的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/20686.html
標籤:C語言
