原文发表于百度空间,2008-7-26
==========================================================================

继续研究PEB,这时候才发现之前写《从PEB获取内存中模块列表》一文时出现的错误.
下面是一个结构:

typedef struct _LDR_MODULE
{
LIST_ENTRY InLoadOrderModuleList;
LIST_ENTRY InMemoryOrderModuleList;
LIST_ENTRY InInitializationOrderModuleList;
void* BaseAddress;
void* EntryPoint;
ULONG SizeOfImage;
UNICODE_STRING FullDllName;
UNICODE_STRING BaseDllName;
ULONG Flags;
SHORT LoadCount;
SHORT TlsIndex;
HANDLE SectionHandle;
ULONG CheckSum;
ULONG TimeDateStamp;
} LDR_MODULE, *PLDR_MODULE;

从这个结构可以知道,如果按InLoadOrderModuleList遍历,那么InLoadOrderModuleList这个结构的地址就是LDR_MODULE结构的地址,但是如果按InMemoryOrderModuleList这个链表来遍历时,得到的下一个链表地址必须减去前面InLoadOrderModuleList这个结构所占的空间,得到的地址才是LDR_MODULE的地址,相应的,如果用第三个链表遍历的话,就要减去两个LIST_ENTRY的大小了.《从PEB获取内存中模块列表》一文中的代码和结果已修正.

正确写法如下:
pListEntry=(LIST_ENTRY*)(PUCHAR)&(pPEBLDR->InInitializationOrderModuleList); //如果使用这个链表
pLdrMod=(LDR_MODULE*)( (char*) pListEntry-sizeof(LIST_ENTRY)*2); //要减去两个LIST_ENTRY大小

注意红色部分,之前就是因为没有写这个,导致一直得不到正确结果,长点教训哦~
PS: 好像遍历这个链表得到的模块列表并不全面...

【旧文章搬运】《从PEB获取内存中模块列表》的补充的更多相关文章

  1. 【旧文章搬运】从PEB获取内存中模块列表

    原文发表于百度空间,2008-7-25========================================================================== PEB中的L ...

  2. 【旧文章搬运】暴搜内存查找PE镜像

    原文发表于百度空间,2008-7-28========================================================================== 前面介绍了修 ...

  3. 【旧文章搬运】改PEB中的映像路径可以这样~

    原文发表于百度空间,2008-7-26========================================================================== 用常用的几个 ...

  4. 【旧文章搬运】KeUserModeCallback用法详解

    原文发表于百度空间及看雪论坛,2010-01-10 看雪论坛地址:https://bbs.pediy.com/thread-104918.htm  代码及附件可到这里下载=============== ...

  5. 【旧文章搬运】无Device的驱动如何通信

    原文发表于百度空间,2009-07-14========================================================================== 标准的驱动 ...

  6. 【旧文章搬运】PE重定位表学习手记

    原文发表于百度空间,2008-11-02========================================================================== 先定义一下 ...

  7. 【旧文章搬运】CsrssWalker学习笔记

    原文发表于百度空间及看雪论坛,2009-05-13 看雪论坛地址:https://bbs.pediy.com/thread-89708.htm============================= ...

  8. [工具类]获取url中参数列表

    写在前面 在项目中经常用到解析url中参数的逻辑,今天先下载就自己封装了一个方法,方便以后使用的时候,信手拈来.当然这里给出的方法是针对常见的url参数类型的,对于重写url,或者路由格式的不考虑. ...

  9. 【旧文章搬运】获取并修改PEB中的映像路径,命令行和当前目录

    原文发表于百度空间,2008-7-24 当时对UNICODE_STRING的使用还有点问题,导致最终效果图中字符串被截断了======================================= ...

随机推荐

  1. 【Java TCP/IP Socket】构建和解析自定义协议消息(含代码)

    在传输消息时,用Java内置的方法和工具确实很用,如:对象序列化,RMI远程调用等.但有时候,针对要传输的特定类型的数据,实现自己的方法可能更简单.容易或有效.下面给出一个实现了自定义构建和解析协议消 ...

  2. centos6.5编译安装gearmand Job Server(C)

    1)下载安装包: wget https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz 2)安装编译器: yu ...

  3. 社会信息化环境下的IT新战略

    我们现在所处的信息化环境正在发生改变,技术已经成为影响组织的最重要的外部力量,传统的正金字塔的结构被移动互联网深深改变:员工能够更加自由的获取信息,变成更多的信息链接,这种链接不光连接人和组织,还连接 ...

  4. 初探STL之算法

    算法 STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包括头文件<algor ...

  5. Python--学习过程

    基础篇 Python基础篇 Python的数据类型 作业总结

  6. c程序设计语言第一章1

    1,c程序都是由函数和变量组成的. 练习1.6验证布尔表达式getchar()!= EOF的取值是0还是1 答: #include <stdio.h> #include <stdli ...

  7. 【转载】Http协议与TCP协议简单理解后续

    写了这么长时间的代码,发现自己对TCP/IP了解的并不是很透彻.虽然会用C#的HttpClient类来进行网络编程,也可以使用Chrome的开发者工具来检测每一次的HTTP请求的报文头与报文体,也知道 ...

  8. php闭包实例

    php闭包函数,一个典型的实例 function getMoney() { $rmb = 1; $dollar = 6; $func = function($dollar) use (&$rm ...

  9. 项目记录26--unity-tolua框架 View03-UIManager.lua

    做为程序员要懂得假设保持健康,对电脑时间太长非常easy眼花,得脖子病,腰都疼,这星期六日组团到康宁去了,哈哈. 一个字"疼"!!!! 废话不多少,把UIManager.lua个搞 ...

  10. 拒绝干扰 解决Wi-Fi的最大问题

    本文转载至:http://www.ciotimes.com/net/rdjs/WI-FI/201006301920.html 射频干扰英文:RFI,(Radio Frequency Interfere ...