模块

映像是 Windows 作为用户模式进程或内核的一部分加载的可执行文件、DLL 或驱动程序。 从中加载映像的文件称为其 图像文件

调试器引擎缓存每个进程的模块列表, (在内核模式下,虚拟进程) 。 通常,此列表中的每个模块都表示进程中的一个图像。 可以使用 Reload 将引擎的模块列表与目标同步。

注意 在内核模式调试中,虚拟进程的引擎模块列表同时包含系统范围的内核模式模块和当前进程的用户模式模块。

模块可以按其在目标虚拟地址空间中的基址指定,也可以按引擎为目标维护的模块列表中的索引来指定。 模块的索引等于它在模块列表中的位置,因此,如果卸载索引较低的模块,此索引将更改。 所有卸载的模块都有索引;这些值始终高于已加载模块的索引。 只要模块保持加载状态,基址就不会更改;在某些情况下,如果卸载模块然后重新加载,则它可能会更改。

索引是介于 0 和目标中的模块数减 1 之间的数字。 通过调用 GetNumberModules 可以找到当前进程中的模块数。

索引可用于通过调用 GetModuleByIndex 查找基址。 可以使用 GetSymbolModule 找到拥有具有给定名称的符号的模块的基址。

以下方法返回指定模块的索引和基址:

  • 若要查找具有给定模块名称的模块,请使用 GetModuleByModuleName

  • 其虚拟地址范围包含给定地址的模块由 GetModuleByOffset 返回。 此方法可用于在给定模块基址的情况下查找模块索引。

以下方法返回基址或索引指定的模块的相关信息:

卸载的模块

在用户模式调试期间,仅在 Windows Server 2003 及更高版本的 Windows 中跟踪卸载的模块。 早期版本的 Windows 仅在内核模式下跟踪卸载的模块。 跟踪它们时,它们会索引到加载的模块之后。 因此,搜索目标模块的任何方法都将搜索所有已加载的模块,然后搜索卸载的模块。 卸载的模块可用于分析尝试调用卸载的代码导致的故障。

合成模块

可以创建合成模块来标记内存区域。 这些模块不能包含真实符号,但可以包含合成符号。 AddSyntheticModule 方法创建新的合成模块。 可以使用 RemoveSyntheticModule 删除合成模块。 重载目标中的所有模块会删除所有合成模块。

映像路径

搜索 可执行映像 时,引擎将使用可执行映像路径。

可执行映像路径可以包含多个以分号 (分隔的目录 ;) 。 这些目录按顺序搜索。

有关可执行映像路径的概述,请参阅可执行映像路径。

若要将目录添加到可执行映像路径,请使用 AppendImagePath 方法。 整个可执行映像路径由 GetImagePath 返回,可以使用 SetImagePath 进行更改。

其他信息

有关进程和虚拟进程的详细信息,请参阅 线程和进程