其实弄清楚LDR_MODULE结构的详细定义这些疑问也就会迎刃而解了.
其相关成员的描述如下:
InLoadOrderModuleList:
Pointers to previous and next LDR_MODULE in load order.
InMemoryOrderModuleList:
Pointers to previous and next LDR_MODULE in memory placement order.
InInitializationOrderModuleList:
Pointers to previous and next LDR_MODULE in initialization order.
BaseAddress:
Module Base address known also as HMODULE.
可以用以下图例来说明此结构:
由该图可知,三个链表结构被PEB_LDR_DATA和LDR_MODULE结构共用. 知道了这些,再看上文给出的获取kernel32.dll模块加载地址的代码就很明了了.