【问题标题】:How to unload DLL itself correctly?如何正确卸载 DLL 本身?
【发布时间】:2019-10-12 13:19:06
【问题描述】:

我在 ntdll.dll 加载后向进程注入 DLL。 然后,在 DllMainDLL_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


【解决方案1】:

要卸载您的 DLL,请使用 FreeLibraryAndExitThread,请确保您已断开所有挂钩并首先清除可能导致问题的所有内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2011-05-24
    • 1970-01-01
    相关资源
    最近更新 更多