DLL中的CreateThread - ERROR_NOT_ENOUGH_MEMORY

时间:2011-05-04 18:50:22

标签: multithreading delphi dll native createthread

我有这个dll在LoadLibraryA加载时创建一个线程,使用RtlCreateUserThread将dll注入另一个进程,注入成功,dll被加载到目标进程(kernel32 LoadLibraryA线程在那里)但是当它来到CreateThread我得到了ERROR_NOT_ENOUGH_MEMORY,那么问题RtlCreateUserThread或目标进程或DLL本身在哪里?我怎么解决它?非常感谢!!

2 个答案:

答案 0 :(得分:0)

好吧,我确实解决了,我在dll中使用了RtlCreateUserThread而不是CreateThread,无论如何,谢谢大家,对不起有任何不便。

答案 1 :(得分:0)

问题在于您的目标。您加载了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

P.S。我不记得createthread的params,但这是当场写的。

欢迎您:)