Мне нужно сделать копию области в памяти (в частности, 00401000-00E88000), а затем клонировать ее в выделенное место с помощью memcpy. Есть ли способ сделать это с C ++ эффективно внутри DLL? Вот мой текущий код:
#include <Windows.h>
#include <iostream>
LPVOID base = VirtualAlloc(NULL, 0xFFFFFF, MEM_COMMIT, PAGE_READWRITE);
int main()
{
AllocConsole();
freopen("CONOUT$", "w", stdout);
//for later
getchar();
}
BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
main();
default:
break;
}
return TRUE;
}
Память разделена на страницы, поэтому в этом диапазоне у вас может быть нераспределенное пространство; Сначала вы должны отобразить память, используя VirtualQuery а затем вы можете скопировать все данные с помощью memcpy.
В любом случае, если вы находитесь в одном и том же адресном пространстве цели, вы можете просто использовать память, как если бы она была вашей, в зависимости от того, что вы хотите с ней делать. (Похоже, что вы пытаетесь сбросить этот блок памяти, если это так, вы можете записать память непосредственно в файл без необходимости сначала копировать его)
Также,
Других решений пока нет …