首页
社区
课程
招聘
关于PEB_LDR_DATA遍历循环链表的问题
发表于: 2009-11-22 15:38 6946

关于PEB_LDR_DATA遍历循环链表的问题

2009-11-22 15:38
6946
我想知道PEB_LDR_DATA结构偏移0x0C处的InLoadOrderModuleList.Flink开始遍历的dll模块是不是全都是系统的dll?链表里有非系统dll吗?有的话,那这些dll是指静态链接的吧?动态加载的dll有没有在链表里?请各位大牛指点指点~

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 280
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有一个好的方法,自己遍历一次看看结果。
2009-11-22 18:24
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢2楼提醒,我写了一个小程序测试了一下:

main函数
{
       LoadLibrary("zlibwapi.dll");  //随便加载一个dll
       .........
       遍历循环链表
       .........
       LoadLibrary("10.dll");        //随便加载一个dll
}

发现遍历模块链表之前,动态加载的dll(本例中的zlibwapi.dll)在链表里面,静态链接的应该也在(我没真正试验过),但在遍历完链表之后,再加载的dll(本例中的10.dll)就不在链表里面了。当然这是我自己写的程序遍历,但系统是什么时候把这些信息写在PEB链表结构里面去的 呢? 为了追查这个问题,我把遍历链表这部分代码注释掉,代码如下:

main函数
{
       LoadLibrary("zlibwapi.dll");  //随便加载一个dll
       __asm
       {
              int  3                             //加个int 3,让OD中断查看
       }
       LoadLibrary("10.dll");         //随便加载一个dll
       __asm
       {
              int  3                             //加个int 3,让OD中断查看
     }
}

然后用OD打开,在程序入口点时,Alt+E,看见里面只有本进程模块,ntdll.dll,kernel32.dll,



然后F9,第一个LoadLibrary后中断,Alt+E



此时系统为链表写入很多模块信息(红色部分)

再F9运行,LoadLibrary("10.dll")后中断,Alt+E



又写进去信息...(红色部分)

经过这测试,我的疑惑终于解开了 特意把过程写出来给大家看看~(大牛飘过...)
还得感谢提醒,虽然没直接给我解答,分还是给你了

注:PEB链表里面的模块其实就是Alt+E里面列出来的模块
上传的附件:
  • 0.PNG (8.51kb,242次下载)
  • 1.PNG (20.28kb,243次下载)
  • 2.PNG (34.81kb,244次下载)
2009-11-22 20:58
0
雪    币: 114
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
当然都有的啊
2009-12-28 14:24
0
雪    币: 8107
活跃值: (1955)
能力值: ( LV8,RANK:122 )
在线值:
发帖
回帖
粉丝
5
LuckyStar ...
2011-10-25 11:08
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
我记得有3个链表的,内容不一样,你可以每个都试试。
2011-10-25 12:27
0
游客
登录 | 注册 方可回帖
返回
//