首页
社区
课程
招聘
[求助]拷贝内核模块内存蓝屏
发表于: 2014-7-29 13:59 4578

[求助]拷贝内核模块内存蓝屏

2014-7-29 13:59
4578
下面是枚举内核模块的代码,中间有一段拷贝内核模块内存

PLIST_ENTRY pEntry = pLDREntry->InLoadOrderLinks.Blink;

        UNICODE_STRING wStrTmp;
        LONG nCount = 0;
        PVOID pNewBuffer;

        pNewBuffer = ExAllocatePool(PagedPool, PAGE_SIZE);

        while(TRUE)
        {
                PLDR_DATA_TABLE_ENTRY pTmpPLDREntry = (PLDR_DATA_TABLE_ENTRY)pEntry;

                if (pTmpPLDREntry == pLDREntry)
                {
                        break;
                }

                pEntry = pTmpPLDREntry->InLoadOrderLinks.Blink;

                if (pTmpPLDREntry->DllBase != 0 && pTmpPLDREntry->SizeOfImage > 0)
                {
                        DbgPrint("驱动模块:BaseName:%wZ,EntryPoint:%08X,DllBase:%08X,SizeOfImage:%08X\n",
                                &pTmpPLDREntry->BaseDllName, pTmpPLDREntry->EntryPoint, pTmpPLDREntry->DllBase, pTmpPLDREntry->SizeOfImage);

                        RtlCopyMemory(pNewBuffer, pTmpPLDREntry->DllBase, PAGE_SIZE); // 蓝屏

                        nCount++;
                }
        }

内核模块内存不允许访问吗?

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

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 138
活跃值: (306)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
PAGE_SIZE - -
pTmpPLDREntry->DllBase
蓝屏  - -
2014-7-29 14:07
0
雪    币: 101
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
什么意思?
2014-7-29 14:17
0
雪    币: 101
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
如果没有
RtlCopyMemory(pNewBuffer, pTmpPLDREntry->DllBase, PAGE_SIZE); // 蓝屏
是不会蓝屏的,内核模块的名称、基址、大小都是正确的
2014-7-29 14:19
0
雪    币: 1392
活跃值: (5107)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=zengaven;1304524]如果没有
RtlCopyMemory(pNewBuffer, pTmpPLDREntry->DllBase, PAGE_SIZE); // 蓝屏
是不会蓝屏的,内核模块的名称、基址、大小都是正确的[/QUOTE]

PAGE_SIZE超过模块大小了吧。有多少就拷贝多少。不要多拷贝
2014-7-29 14:50
0
雪    币: 101
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
PAGE_SIZE是0x1000,1K,不可能太小就没办法拷贝的,1个字节也要能拷贝啊
2014-7-29 15:02
0
雪    币: 101
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
蓝屏错误码是0x00000050:PAGE_FAULT_IN_NONPAGED_AREA
2014-7-29 15:12
0
雪    币: 101
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
目标系统是VMWare虚拟机Win7 64
在XP下也是蓝屏
2014-7-29 15:17
0
雪    币: 2153
活跃值: (740)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
9
先锁内存页,做个MDL映射啥的,再拷贝。
2014-7-29 15:23
0
雪    币: 101
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
如何先锁内存页,做个MDL映射啥的?
2014-7-29 15:37
0
雪    币: 3116
活跃值: (1269)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
11
init section.discardable
2014-7-29 17:26
0
雪    币: 101
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
init section.discardable
详细点?
2014-7-29 17:50
0
雪    币: 70
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
这种问题很好解决啦,先关中断,提高IRQL,内存可写,然后开中断啦。多调试下,想下就明白啦。
2014-7-29 18:02
0
雪    币: 101
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
解决了,用网上一个SafeCopyMemory
2014-7-29 19:04
0
雪    币: 1651
活跃值: (1425)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
15
你确定你要拷贝的内存存在吗?有时候内核的有些段段被释放了。比如内核的initdebug段。也有可能你要拷贝的内存被换页了。
2014-7-30 00:30
0
游客
登录 | 注册 方可回帖
返回
//