如上图所示,imtes构成了全局模块数组,该数组所使用的内存是从kernel32 heap中分配而来的。系统使用heapalloc来分配一块内存。当新的模块加入时,kernel32使用heaprealloc动态扩展全局数组。当内核(kernel32)产生一个新的imte,它会搜寻pmoduletablearray中的空白元素,找到一个,就把imte指针放进去。这个元素的索引值稍后在我们探索modrefs时将扮演重要角色。pmoduletablearray的第一个元素(索引为0)用来表示kernel32.dll模块。
pmoduletablearray中的每一个非零元素都代表系统中一个被加载到内存的exe或者dll。每一个这样的元素都是一个imte指针(在伪代码中我以pimte表示)。虽然,module database的格式是公开的(实际上就是image_nt_headers结构),但imte的格式并没有公开。
笔记:
本文关键:Windows 95 System Programming SECRENTS学习笔记(一)