Multithreading 从DLL创建线程-错误\u内存不足\u

Multithreading 从DLL创建线程-错误\u内存不足\u,multithreading,delphi,dll,native,createthread,Multithreading,Delphi,Dll,Native,Createthread,我有一个dll,它在LoadLibraryA加载时创建了一个线程,该dll使用RtlCreateUserThread注入到另一个进程中,注入成功,dll加载到目标进程中(kernel32 LoadLibraryA线程在那里),但当涉及到CreateThread时,我得到了错误\u内存不足\u,那么RtlCreateUserThread、目标进程或DLL本身的问题在哪里呢?我该怎么解决呢?非常感谢 嗯,我确实解决了这个问题,我在dll中使用了RtlCreateUserThread而不是Create

我有一个dll,它在LoadLibraryA加载时创建了一个线程,该dll使用RtlCreateUserThread注入到另一个进程中,注入成功,dll加载到目标进程中(kernel32 LoadLibraryA线程在那里),但当涉及到CreateThread时,我得到了错误\u内存不足\u,那么RtlCreateUserThread、目标进程或DLL本身的问题在哪里呢?我该怎么解决呢?非常感谢

嗯,我确实解决了这个问题,我在dll中使用了RtlCreateUserThread而不是CreateThread,无论如何,谢谢大家,很抱歉给您带来不便。

问题出在您的目标中。您加载了
Kernel32
,很好,但是您没有告诉目标进程函数的地址在哪里。我假设您从主机进程中注入了一个代码段,因此没有像使用DLL注入那样解析用于注入到目标进程的导入表

您可以从注入函数调用
CreateThread
,但是需要先加载它的地址

typedef DATATYPE_OF_CREATETHREAD (__stdcall *MyCreateThread)(PARAMS_OF_CREATETHREAD);
MyCreateThread _MyCreateThread;

_MyCreateThread = (MyCreateThread)GetProcAddress("kernel32.dll", "CreateThread");
_MyCreateThread(PARAMS_TO_PASS); // CreateThread, with it's address loaded in memory of your injected code segment/function
这样^就可以从注入的函数调用
CreateThread

另外,我不记得createthread的参数,但这是在现场写的


不客气:)

我很怀疑它是否在RTLCreateUserThread或CreateThread中,所以它必须在您的DLL中。但是,我们无法从这里看到您的代码,因此很难告诉您可能出了什么问题或如何修复它。您需要使用调试器,或者发布代码,以便我们能够帮助您找到问题。欢迎使用stackoverflow。对不起,你的问题无法回答。请阅读:关于如何改进它的提示。