Friday, January 22, 2010

Process Memory Scanner (Windows)




#include <windows.h>

#include <cstdlib>
#include <iostream>
#include <string>

int main() {
std::cout << "begin scan..." << std::endl;

MEMORY_BASIC_INFORMATION info;
void* curAddrPointer;
unsigned long curAddr = 0ul;
unsigned long prevAddr = curAddr;
unsigned no = 0;

while (true) {
no++;
curAddrPointer = reinterpret_cast<void*>(curAddr);
if (0 == VirtualQuery(curAddrPointer, &info, sizeof(info))) {
std::cout << "VirtualQuery is FAIL." << std::endl;
break;
}
prevAddr = curAddr;
curAddr += info.RegionSize;
if (curAddr <= prevAddr) break;

std::cout.width(3);
std::cout.setf(std::ios_base::right, std::ios_base::adjustfield);
std::cout << no;
std::cout << ") [" << curAddrPointer << "] ";
std::cout.width(5);
std::cout.setf(std::ios_base::right, std::ios_base::adjustfield);
std::cout << prevAddr / 1024 / 1024 << ": ";
std::cout.width(5);
std::cout.setf(std::ios_base::right, std::ios_base::adjustfield);
std::cout << info.RegionSize / 1024 / 1024 << " MB ";
switch (info.State) {
case MEM_COMMIT: std::cout << "commit"; break;
case MEM_FREE: std::cout << "free"; break;
case MEM_RESERVE: std::cout << "reserve"; break;
default: std::cout << "?";
}
std::cout << std::endl;
}

std::cout << "DONE; press enter to exit..." << std::endl;
std::string done;
std::getline(std::cin, done);
return EXIT_SUCCESS;
}







%%

No comments: