メモリ内の特定のデータ型をスキャンする必要があるアプリケーションがあります。いくつかのベンチマーク テストを取得するために、次のプログラムを作成しました。
long count = 0;
MEMORY_BASIC_INFORMATION meminfo;
unsigned char *addr = 0;
HANDLE hProc = GetCurrentProcess();
while (true){
if ( VirtualQueryEx( hProc, addr, &meminfo, sizeof( meminfo ) ) == 0 ){
break;
}
if ( ( meminfo.State & MEM_COMMIT ) && ( meminfo.Protect & WRITABLE ) ){
addr = (unsigned char*)meminfo.BaseAddress + meminfo.RegionSize;
count++;
printf("%d",count);
}
}
printf("%ld\n",count);
このプログラムは動作しません。最初のメモリ チャンクでブロックまたはクラッシュします。また、概念的にも失敗します。理想的には、現在のプロセスのすべての変数へのポインターが必要なので、それらが自分に関連しているかどうかを確認できます。誰かが私を正しい方向に押し進めることができれば、それは素晴らしいことです。
そもそもこれを行うのは一般的に悪い考えであることはわかっています。それを行う必要がある場合、どのように行うかを知りたいだけです。