首页
社区
课程
招聘
[旧帖] [求助]内存拷贝蓝屏,求助 0.00雪花
发表于: 2014-11-24 18:09 1953

[旧帖] [求助]内存拷贝蓝屏,求助 0.00雪花

2014-11-24 18:09
1953
最小的一个驱动什么都没有,只能加和卸载,然后如下:
PVOID addr1;  //全局变量
-----------------------------------
addr1=ExAllocatePool(NonPagedPool,40000);  //申请正常
RtlZeroMemory(addr1,40000);  //清0正常
RtlMoveMemory(addr1,某模块地址,10004);   //拷贝正常,得到数据

  拷1万字节左右正常,1万长度以下全正常,超过1万多一些就蓝屏,2万蓝,3万蓝。。。这模块长度是4万多字节,一次拷一万,连四次也是蓝
首部拷出一段,尾部拷出一段,总数超1万多还是蓝,,有老师简单说了一句:“可读内存不到一万” ,没懂,,还有人说是系统问题,简装版的不行要完整版
  头很大,如何能完成一个模块全部内容的拷贝呢?  跪求指点

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看dmp啊!!!你确定  模块地址+10004  这个区间的数据都可读?
2014-11-24 20:34
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
从首部到尾部的数据都是可以读的,就是好象不能连着读出1万以上的字节,如果读9000字节,随便在哪开始读都可以
2014-11-24 20:50
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
一个模块从头到尾,每一处的数据都 可以读出,为什么读出总数不能多?有数量限制?是它自身的限制还是系统给的限制? 它每一处内存数据都能读,那它的可读内存又是什么?
2014-11-24 21:04
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
跪求指点
2014-11-24 23:47
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
MmIsAddressValid、__try{ ProbeForRead }__except(){}
2014-11-25 09:26
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
挺不错的     支持一下啊
2014-11-25 11:12
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
看DMP     看是复制到哪个地址蓝的    然后DD一下  看能不能访问
2014-11-25 20:59
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
PVOID myMemory;

驱动入口函数()

      ...

     Copy__Memory();


PVOID Copy__Memory()
{
        KIRQL  oldIrql;       
       
        ULONG mbase=0xb1ab2000;  //某模块基址
        ULONG msize=851968;     //模块长度
       
        myMemory=ExAllocatePool(NonPagedPool,msize);   //myMemory 是全局变量
               
        if(myMemory==NULL)   
        {
                return NULL;
        }
       
        oldIrql = KeRaiseIrqlToDpcLevel();   
       
        __asm   
        {
                cli
                        push eax         //去掉保护
                        mov eax,cr0
                        and eax,0xfffeffff  
                        mov cr0,eax
                        pop eax
        }   
               
        RtlZeroMemory(myMemory,msize);
       
        RtlMoveMemory(myMemory,(PVOID)mbase,msize);       
       
        __asm
        {
                       push eax
                        mov eax,cr0
                        or eax,10000h
                        mov cr0,eax
                        pop eax
                        sti
        }

        KeLowerIrql(oldIrql);

        return myMemory;
}

--------------------------生成:testlsxx.sys--------------以下dmp文件内容

Loading Dump File [C:\Users\mydriver\Desktop\Mini010511-11.dmp]
Mini Kernel Dump File: Only registers and stack trace are available

Symbol search path is: D:\win7-32-Symbols;D:\WinDDK\7600.16385.1\Debuggers\symbols
Executable search path is:
Unable to load image ntoskrnl.exe, Win32 error 0n2
*** WARNING: Unable to verify timestamp for ntoskrnl.exe
Windows XP Kernel Version 2600 (Service Pack 3) UP Free x86 compatible
Product: WinNt, suite: TerminalServer SingleUserTS
Machine Name:
Kernel base = 0x804d8000 PsLoadedModuleList = 0x8055c1c0
Debug session time: Wed Jan  5 05:27:30.394 2011 (UTC + 8:00)
System Uptime: 0 days 0:03:24.984
Unable to load image ntoskrnl.exe, Win32 error 0n2
*** WARNING: Unable to verify timestamp for ntoskrnl.exe
Loading Kernel Symbols
...............................................................
................................................................
....
Loading User Symbols
Loading unloaded module list
...........
Unable to load image testlsxx.sys, Win32 error 0n2
*** WARNING: Unable to verify timestamp for testlsxx.sys
*** ERROR: Module load completed but symbols could not be loaded for testlsxx.sys
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

Use !analyze -v to get detailed debugging information.

BugCheck 1000000A, {b1ab2000, 2, 0, 804dada8}

*** WARNING: Unable to verify timestamp for mssmbios.sys
Probably caused by : testlsxx.sys ( testlsxx+1153 )

Followup: MachineOwner
---------

kd> !analyze -v

*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

IRQL_NOT_LESS_OR_EQUAL (a)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.
If a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: b1ab2000, memory referenced
Arg2: 00000002, IRQL
Arg3: 00000000, bitfield :
        bit 0 : value 0 = read operation, 1 = write operation
        bit 3 : value 0 = not an execute operation, 1 = execute operation (only on chips which support this level of status)
Arg4: 804dada8, address which referenced memory

Debugging Details:
------------------

READ_ADDRESS:  b1ab2000

CURRENT_IRQL:  2

FAULTING_IP:
nt!memmove+33
804dada8 f3a5            rep movs dword ptr es:[edi],dword ptr [esi]

CUSTOMER_CRASH_COUNT:  11

DEFAULT_BUCKET_ID:  COMMON_SYSTEM_FAULT

BUGCHECK_STR:  0xA

PROCESS_NAME:  System

LAST_CONTROL_TRANSFER:  from f8811153 to 804dada8

STACK_TEXT:  
f89b3c4c f8811153 81cc9000 b1ab2000 000d0000 nt!memmove+0x33
WARNING: Stack unwind information not available. Following frames may be wrong.
f89b3c74 f881109f f89b3d4c 805a49ad 8212b800 testlsxx+0x1153
f89b3c7c 805a49ad 8212b800 81d9c000 00000000 testlsxx+0x109f
f89b3d4c 805a4c83 800004b0 00000001 00000000 nt!IopLoadDriver+0x67d
f89b3d74 804e526b 800004b0 00000000 823b6da8 nt!IopLoadUnloadDriver+0x56
f89b3dac 8057beff b1e9fcf4 00000000 00000000 nt!ExpWorkerThread+0x100
f89b3ddc 804f98ea 804e5196 00000001 00000000 nt!PspSystemThreadStartup+0x34
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16

STACK_COMMAND:  kb

FOLLOWUP_IP:
testlsxx+1153
f8811153 ??              ???

SYMBOL_STACK_INDEX:  1

SYMBOL_NAME:  testlsxx+1153

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: testlsxx

IMAGE_NAME:  testlsxx.sys

DEBUG_FLR_IMAGE_TIMESTAMP:  4d238e91

FAILURE_BUCKET_ID:  0xA_testlsxx+1153

BUCKET_ID:  0xA_testlsxx+1153

Followup: MachineOwner
---------------------------------------------------------

总之就是不能拷贝,写内存没问题,就是到一定时候就不能读了,用__try和__except 用
ProbeForRead进行测试也一样,直接返到except中,就是读有问题,用windbg的看内存
工具,到了接近不能读的区域也是提示不能读,用KD 去那地址读也是空白,但是这个地址是
在这个模块区间啊,为什么不能读呢,换几个模块也一样,读到一定数量字节后就不能读了
为什么??? 有什么别的办法获取某个模块的内存全部数据吗??求朋友们帮助啊
2014-11-26 17:23
0
雪    币: 1443
活跃值: (96)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
irql太高了,读到paged内存就挂了。
2014-11-26 17:27
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
eeeee走过瞧一瞧,然后看不懂
2014-11-26 17:31
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
如何把IRQL等级调到最低啊,能给个代码吗
2014-11-26 17:43
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
驱动程序默认就0级中断最低了的,把所有IRQL相关的代码去掉,仅仅一个考贝函数,还是读一些后 蓝屏,疯了
2014-11-26 19:02
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
222真2
2014-11-27 09:10
0
雪    币: 46
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
CLI禁止中断发生
STL允许中断发生

       这两个指令只能在内核模式下执行,不可以在用户模式下执行;而且在内核模式下执行时,应该尽可能快的恢复中断,因为CLI会禁用硬件中断,若长时间禁止中断会影响其他动作的执行(如移动鼠标等等),系统就会变得不稳定。在标志寄存器中中断标志清零的情况下,可以以“int  ××”的形式调用软中断。

如果你使用了CLI命令,那么就等于禁止中断了,比提升IRQL还要厉害的。

还有就是,请把你修改后的代码和蓝屏信息发送上来,否则大家怎么去找原因呢??
2014-11-27 10:00
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
hello这个问题不错啊
2014-11-27 11:31
0
游客
登录 | 注册 方可回帖
返回
//