外部で使用されていたプロセスが現在内部で使用されています。このプログラムは ReadProcessMemory を使用してメモリからデータを Char * にコピーします。以下はコードです。
char* szMemDump = (char*)malloc(mbi.RegionSize+1);
ReadProcessMemory( NULL, (unsigned long*)dwMemAddr, szMemDump, mbi.RegionSize, NULL );
私は現在、プログラム内からこれを行っています。私の目的は、RPM を使用せずにその情報を同じ配列に読み込むことです。
memcpy を試みましたが、プログラムがクラッシュするようですが、大量のメモリを読み込んでいるため、なぜこれが起こっているのかを発見するのは困難です。
memcpy(szMemDump, (void*)dwMemAddr, mbi.RegionSize);
RPM を使用するこのプログラムの代替手段には問題がなく、データを正確にスキャンできるため、memcpy が間違っているとしか思えません。
編集: 新しいコードはプロセス内で DLL としてロードされています。これにより、内部で値を読み取ることができるようになります。
更新コードを編集します。
if( VirtualQuery((unsigned long*)dwMemAddr, &mbi, sizeof(mbi) ) == sizeof(mbi) )
{
if( (mbi.Protect != PAGE_NOACCESS) && (mbi.State == MEM_COMMIT) )
{
char* szMemDump = (char*)malloc(mbi.RegionSize+1);
//ReadProcessMemory( NULL, (unsigned long*)dwMemAddr, szMemDump, mbi.RegionSize, NULL );
memcpy(szMemDump, (unsigned long*)dwMemAddr, mbi.RegionSize);
for( x=0; x<mbi.RegionSize; x++ )
{
//Loop actions
}
free( szMemDump );
}
}