【发布时间】:2019-10-12 13:19:06
【问题描述】:
我在 ntdll.dll 加载后向进程注入 DLL。 然后,在 DllMain(DLL_PROCESS_ATTACH 事件案例)中,我调用 LdrRegisterDllNotification 并等待特定 DLL 何时加载(例如 statistic.dll)我想挂钩哪些功能。 如果 statistic.dll 没有加载,我需要从进程中卸载注入的 DLL。
主要问题是:如何正确卸载注入的DLL?
我想通过不同的线程来实现它,该线程将检查(一段时间后)进程中的 statistic.dll 库(或我可以在 statistic.dll loading) 并卸载注入的 DLL(如果未加载)。但据我所知,我们无法在 DllMain 中创建线程。
【问题讨论】:
-
"据我所知,我们无法在 DllMain 中创建线程" - 是的,你可以。只是不要让 DllMain 在线程上等待,或者让线程在 Dllmain 上等待。那是有问题的,而不是创建线程的行为。
-
你可以创建自己的线程,最后必须调用
FreeLibraryAndExitThread -
谢谢大家。我对创建线程有疑问,并想听取有关其后果的其他意见。我通过 FreeLibraryAndExitThread 实现了卸载 dll 本身,它工作正常。
标签: c++ windows winapi dll dll-injection