2016-02-18 2 views
-3

Мне нужно сделать копию области в памяти (в частности, 00401000-00E88000), а затем клонировать ее в выделенное пространство с помощью memcpy. Есть ли способ сделать это с C++ эффективно внутри DLL? Heres мой текущий код:Использование memcpy для клонирования всей области памяти в мою собственную

#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; 
} 
+4

Да, вы можете скопировать память используя 'memcpy'. Да, «memcpy» эффективен. В чем вопрос? – user2079303

+0

Вопрос в том, как скопировать всю область памяти @ user2079303 –

+1

И ответ: «memcpy (dest, src, size);». – ElderBug

ответ

0

Память делится на страницы, поэтому в этом диапазоне у вас может быть незанятое пространство; сначала вам необходимо сопоставить память с помощью VirtualQuery, а затем вы можете скопировать все данные с помощью memcpy.

В любом случае, если вы находитесь в одном и том же адресном пространстве цели, вы можете просто использовать память, как если бы она была вашей, в зависимости от того, что вы хотите с ней делать. (Похоже, что вы пытаетесь сбросить этот блок памяти, если это так, вы можете написать памяти непосредственно в файл, не имея на самом деле скопировать его первым)

Кроме того,

Смежные вопросы