将结构参数传递给 CreateThread() 而不接收 char* 变量

Passing struct argument to CreateThread() and not receiving char* variable

我正在反射性地将一个 dll 注入到另一个进程的内存中,显然我需要调用 CreateThread()。我将某些参数传递给我使用 loader_data 结构注入的 dll。我有一些我需要传递的变量,例如内存块的大小等。这些都成功地传递到我注入的 dll,但是当将 char* 传递到我的结构时,它最终对我注入的 dll 保留为空DllMain 的参数。

loader_data_t *parameter = new loader_data_t();
... initialize variables.

lpRemoteLibraryBuffer3 = VirtualAllocEx(proc, NULL, sizeof(loader_data_t), MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);

WriteProcessMemory(proc, lpRemoteLibraryBuffer3, parameter, sizeof(loader_data_t), NULL);

这就是我为参数分配 space 的方式。

typedef struct loader_data_t {
    char *chunk;
    int chunk_size;
    ULONG_PTR reloc_address;
};

这就是我要传递的结构。我绝对正确地初始化了它,我已经检查以确保一切设置正确。但是,当它传递给 DllMain 中的保留参数时,除 char* 块变量外,所有其他变量都是正确的。我真的很困惑,请原谅可能模糊的标题。

假设您在初始化数据代码中设置了 'chunk',那么远程地址 space 中的指针将引用本地进程中的地址。

解决这个问题的简单方法是使块成为一个数组(可能是结构的最后一个成员)并分配一个足够大的块来保存块的数据。

更复杂的是在远程进程中为块的数据分配第二个块,将数据复制到该块,将该地址写入本地实例的块成员,然后才将本地结构写入远程进程。