Ⅰ. はじめに
ある特定範囲の最初から最後までをサーチをする場合、
メモリを確保していない場所までサーチするため非常に遅くなります。
VirtualQueryExを使うと、
メモリのアクセス権の状態などによって分岐を行えるため、
非常に高速にメモリサーチを行うことができます。
Ⅱ. サンプルプログラム
void search() { // メモリ情報 MEMORY_BASIC_INFORMATION mBI; // サーチ開始アドレス UINT start = 0x00400000; // サーチ終了アドレス UINT end = 0x7FFFFFFF; while(start < end) { SIZE_T size = VirtualQueryEx(processHandle, (void*)start, &mBI, sizeof(MEMORY_BASIC_INFORMATION)); if (size == 0) { std::cout << "error" << std::endl; break; } if ((mBI.State == MEM_COMMIT) && (mBI.Type == MEM_PRIVATE) && (mBI.Protect == PAGE_READWRITE)) { // メモリ検索処理 } start += mBI.RegionSize; } }
参考
Cheat Engine :: View topic - C++ VirtualQueryEx
http://www.cheatengine.org/forum/viewtopic.php?p=5567512&highlight=&sid=6f16a11d298cadce0ba6e541829af654