首页 文章

将struct参数传递给CreateThread()并且不接收char *变量

提问于
浏览
-1

我反思性地将一个dll注入到另一个进程的内存中,我需要显然调用CreateThread() . 我正在使用我的loader_data结构将某些参数传递给我正在注入的dll . 我有一些我需要传递的变量,比如一块内存的大小等等 . 这些都被成功传递给我注入的dll,但是当我将一个char *传递给我的struct时,它最终变为空,这是我在注入的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);

这就是我为参数分配空间的方式 .

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

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

1 回答

  • 2

    假设您在初始化数据代码中设置了“chunk”,那么远程地址空间中的指针将引用本地进程中的地址 .

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

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

相关问题