読者です 読者をやめる 読者になる 読者になる

備忘録

備忘録

C++ 高速にメモリサーチを行う方法

ある特定範囲の最初から最後までをサーチをする場合、
メモリを確保していない場所までサーチするため非常に遅くなります。

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