C++ 将参数传递给Dll入口点

C++ 将参数传递给Dll入口点,c++,dll,dll-injection,C++,Dll,Dll Injection,我想将一个结构传递到我的dll的main,它位于我的注入器中,所以基本上我想这样做: struct structure{ char text[1024]; }; int DllMain(structure arg1,uintptr_t arg2,uintptr_t arg3); 然而,我想知道如何使注入器通过结构。顺便说一句,Im手动映射dll。您不能将自定义参数传递给DllMain()。签名是固定的,除此之外,您不需要直接调用DllMain(),只有操作系统可以 您的选择是: 让D

我想将一个结构传递到我的dll的main,它位于我的注入器中,所以基本上我想这样做:

struct structure{
    char text[1024];
};
int DllMain(structure arg1,uintptr_t arg2,uintptr_t arg3);

然而,我想知道如何使注入器通过结构。顺便说一句,Im手动映射dll。

您不能将自定义参数传递给
DllMain()
。签名是固定的,除此之外,您不需要直接调用
DllMain()
,只有操作系统可以

您的选择是:

  • 让DLL导出一个单独的函数,在将DLL注入进程后调用该函数

  • 将数据存储在DLL注入后可以访问的共享内存块中

  • 在DLL和注入器之间设置进程间通信通道,例如使用命名管道或套接字


在DLL中添加一个与您的结构大小相同或更大的固定大小的资源,内容无关紧要,稍后您将覆盖它,它基本上是一个存根

在手动映射DLL之前,将其加载到注入器的本地内存中

用您的数据覆盖此资源

手动将DLL映射到目标进程


通过“手动映射”DLL访问资源以获取所需的数据

,您的意思是您没有使用操作系统的函数加载DLL吗?是否手动将文件内容加载到目标进程的虚拟地址空间?这是否意味着您也在手动调用DLL的入口点?我相信在这种情况下签名不是固定的。如果我正确理解了OP,那么他没有使用操作系统的LoadLibrary API,而是在使用。这意味着他也在手动调用DLL的入口点,因此他可以完全控制签名。然而,我仍然对你的答案投了赞成票,因为这个问题不是很清楚。