C#将参数传递给CreateRemoteThread并读取它们

时间:2018-05-02 19:57:38

标签: c# windows createremotethread

假设:

#include<Windows.h>
extern "C" __declspec(dllexport) bool WINAPI DllMain(HINSTANCE hInstDll, DWORD 
fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
        {
            MessageBox(NULL, "Hello World!", "Dll says:", MB_OK);
            break;
        }

        case DLL_PROCESS_DETACH:
            break;

        case DLL_THREAD_ATTACH:
            break;

        case DLL_THREAD_DETACH:
            break;
    }
    return true;
}

我想将参数传递给我的C ++“DLLMain”并读取它们并使用cout>>来显示它们

我怎么想这样做

在c#的“CreateRemoteThread”中,我做了吗

1 个答案:

答案 0 :(得分:0)

我将这个问题读为:

我正在将DLL注入到外部进程中,如何从该DLL调用函数并使用CreateRemoteThread()将参数传递给该函数?

注射时,使用CreateRemoteThread()调用LoadLibrary(),然后传递1个变量,该变量是要加载的DLL的路径。

您只能传递1参数。无法传递多个参数。

但是有解决方案。在您的DLL中创建一个导出函数,该函数使用一个指针来构造具有所需参数的结构。

使用WriteProcessMemory()将包含args的结构写入目标进程的内存中。

现在再次调用CreateRemoteThread()并将指针传递给您编写的内存。在函数内部,解析结构以获取参数。

这是必须执行的操作,因为CreateRemoteThread()只能传递1个参数。

相关问题