尽管未被正式卸载,DLL却从内存中消失之谜,第一部分
本文深入探讨了一个看似矛盾的问题:一个未被显式卸载的DLL,为何会从进程内存中消失。作者通过分析调试场景,逐步揭示其背后的技术原因与排查思路。
背景速读
- 本文来自微软资深工程师 Raymond Chen 的经典博客 *The Old New Thing*,专门讲解 Windows 底层细节和诡异的 bug 案例。
- 核心谜题:一个 DLL(动态链接库)明明没有被显式卸载(FreeLibrary),但在进程内存中却找不到了。作者将分步还原调查过程。
- 需要了解的背景:Windows 中加载 DLL 时,系统会维护一个引用计数;只有引用计数归零且进程主动调用 FreeLibrary 才会卸载。此文涉及的场景打破了这一常识。
- 这类问题通常指向某些隐秘的系统机制(如 DLL 重定向、内存映射文件被替换、或调试器/防病毒注入等第三方干扰),对 C++/Windows 系统级程序员具有实战参考价值。