模块

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

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

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

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

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

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

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

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

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

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

卸载的模块

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

合成模块

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

图像路径

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

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

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

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

其他信息

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