The head of a doubly-linked list that contains the loaded modules for the process. Each item in the list is a pointer to an LDR_DATA_TABLE_ENTRY structure
写完这篇手记之后,越觉得不对劲,这么浅显的方法为什么没有被拿来通用,google了一下,原来,早在09年,就有某牛总结出来了:
http://blog.harmonysecurity.com/2009/06/retrieving-kernel32s-base-address.html
文章用到的是InMemoryOrderModuleList链,至于遍历这些链为什么没有成为通用的方法,很显然,作者在后面加上了如是说明:
Their appears to be some cases on Windows 2000 whereby the above method will not yield the correct result.
提到了在2000平台下,某些例子可能会得到错误的结果,最后提出来查找hash函数名的方法,这个和以前可以某些病毒在IAT里面找从kernel32.dll引入的函数,向上找“MZ”头方法很类似,同样也是依靠遍历LDR链,只不过比较的就是DllName了。详细的代码请参考上文连接:D。