我有一个进程在外部使用,现在是内部的,这个程序使用 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 );
}
}