在深入挖掘模块、进程和线程的细节之前,我必须先声明,这些资料的透露并未经过微软的核准。微软希望你不要在自己的代码中放进与这些数据结构有关的资料。对于那些需要处理模块、进程和线程的应用程序,微软提供的解决方案是定义在tlhelp32.h中的toolhelp32 api。
toolhelp32函数提供了对于模块、进程和线程数据结构的有限处理能力,局限在微软认为安全的范围之内。我必须强调,这样的处理只是一种只读处理。但是,微软经常认为足够的资料,对于系统程序员来说如我者是不够的。例如,toolhelp32没有提供“枚举一个进程的handle table的能力”。如果你需要这样的动作,你就必须直接读取这些资料。
win32模块(modules)
一个win32模块代表的是一个被win32 loader加载的exe或dll的程序代码、数据和资源。因此,内存中的一个模块都对应到磁盘中的一个程序。exe和dll本身并不是模块。是由win32 loader将其加载的内存并产生对应的模块。win32 pe格式的一个优势是:将它们加载到内存是十分简单的。操作系统将一个载入模块的所有高级信息保存在一个结构体中,此结构被我称之为:module database。