-3

メモリ内の領域 (具体的には 00401000-00E88000) のコピーを作成し、memcpy を使用して割り当てられたスペースに複製する必要があります。DLL 内で C++ を効率的に使用する方法はありますか? 私の現在のコードは次のとおりです。

#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

1 に答える 1

0

メモリはページに分割されているため、その範囲に未割り当て領域がある可能性があります。最初にVirtualQueryを使用してメモリをマップする必要があり、次に memcpy ですべてのデータをコピーできます。

いずれにせよ、ターゲットと同じアドレス空間にいる場合は、目的に応じてメモリを自分のものであるかのように使用できます。(そのメモリブロックをダンプしようとしているようです。その場合、最初に実際にコピーすることなく、メモリをファイルに直接書き込むことができます)

また、

于 2016-02-22T20:16:38.070 に答える