Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在DLL'之前创建RemoteThread;已加载多个文件_C++_Windows_Multithreading_Winapi - Fatal编程技术网

C++ 在DLL'之前创建RemoteThread;已加载多个文件

C++ 在DLL'之前创建RemoteThread;已加载多个文件,c++,windows,multithreading,winapi,C++,Windows,Multithreading,Winapi,我试图使用CreateRemoteThread将我的代码注入到另一个进程,但如果在进程加载DLL时注入我的代码,则在加载DLL之前,线程将被冻结(根据MSDN,这是正常的)。我曾尝试通过注入代码并等待结果并检查EAX来检测进程是否已加载,但速度非常慢 所以,我正在寻找一种方法来检查进程是否仍在加载DLL,或者它是否已加载所有DLL,我可以调用CreateRemoteThread来等待立即执行我的代码。使用,将目标进程作为被调试者运行,并将注入进程作为“调试器”,然后,您将获得所有DLL加载/卸载

我试图使用CreateRemoteThread将我的代码注入到另一个进程,但如果在进程加载DLL时注入我的代码,则在加载DLL之前,线程将被冻结(根据MSDN,这是正常的)。我曾尝试通过注入代码并等待结果并检查EAX来检测进程是否已加载,但速度非常慢

所以,我正在寻找一种方法来检查进程是否仍在加载DLL,或者它是否已加载所有DLL,我可以调用CreateRemoteThread来等待立即执行我的代码。

使用,将目标进程作为被调试者运行,并将注入进程作为“调试器”,然后,您将获得所有DLL加载/卸载事件的通知,以及进程加载并准备运行的时间(您点击“加载程序断点”)。对于x64,它会变得更复杂,如果您试图将其注入托管代码,它会变得更复杂,但效果非常好

我有几个工具使用这种方法(并且)没有可用的源代码,对不起


如果您正试图钩住各种API,那么实现这一点的标准方法就是始终钩住
LoadLibrary()
,这样您就可以钩住进程运行时加载的任何新DLL。但是,我仍然觉得使用调试api控制目标进程很有用,因为它可以让您尽快(在加载程序断点处,在恢复进程之前)更容易地进行挂钩。

由于您已经有了目标进程的
句柄,请在调用
CreateRemoteThread()之前尝试使用
WaitForInputdle()

“已加载所有DLL”对于任意进程是未定义的。想想
LoadLibrary
调用。为什么加载DLL时线程等待会出现问题?这是一个问题,因为我的应用程序在进程之间循环,所以在我的进程检查DLL是否加载时,其他进程可能会启动。嗯,为每个进程使用不同的线程。我不能在每个20毫秒内创建不同的线程。谢谢,这是一个很好的解决方案,但是否有一个异步API(立即返回)可用于检查进程是否已初始化?据我所知还没有。听起来像是一个非常专业的功能,用途有限-你到底想做什么?也许你应该用另一种方式来做?