能力值:
( LV2,RANK:10 )
|
-
-
2 楼
额,这个看不懂
|
能力值:
( LV7,RANK:110 )
|
-
-
3 楼
驱动程序读了错误的内存地址会蓝屏 就像linux下的段错误差不多 不好找!!
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
在虚拟机中不会蓝,但是到本机上会蓝,机器是双核的
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
typedef struct jiegou_sousuo{
UCHAR * jb_char_zz;
ULONG jb_char_gs;
LONG jb_char_py;
}jiegou_sousuo;
BOOL find_fun_bijiao(ULONG jb_dz,UCHAR * jb_zz,ULONG jb_gs)
{
BOOL jb_fh=TRUE;
ULONG jb_jc=0;
UCHAR jb_uchar=0;
//地址不符合要求
if (jb_dz<0x80000000)
{
return jb_fh;
}
//没有比较的东西
if (jb_gs<1)
{
return FALSE;
}
while(jb_jc<jb_gs)
{
jb_uchar=*(UCHAR *)(jb_dz+jb_jc);
if (jb_uchar != jb_zz[jb_jc])
{
jb_fh=FALSE;
break;
}
jb_jc++;
}
return jb_fh;
}
ULONG find_fun_sousuo(ULONG jb_dz_qs/*起始地址*/,ULONG jb_size,jiegou_sousuo * jb_sz,ULONG jb_cs_gs,LONG jb_jg_py)
{
ULONG jb_fh=0;
ULONG jb_jc=0,jb_jc_1=0,jb_zs_1=0;
BOOL jb_biaozhi=FALSE;
//地址不符合要求
if (jb_dz_qs<0x80000000)
{
return jb_fh;
}
//没有要搜索的内容则返回
if (jb_cs_gs<=0)
{
return jb_fh;
}
jb_jc_1=0;
jb_zs_1=jb_size-jb_sz[0].jb_char_gs;
while (jb_jc_1<jb_zs_1)
{
if (TRUE== find_fun_bijiao(jb_dz_qs+jb_jc_1,jb_sz[0].jb_char_zz,jb_sz[0].jb_char_gs))
{
if (jb_cs_gs>1)//有附加条件
{
//DbgPrint("有附加条件\n" );
jb_jc=1;
jb_biaozhi=TRUE;
while(jb_jc<jb_cs_gs)
{
//DbgPrint("测试1 = 0x%8x \n" ,(ULONG)((jb_sz+1)->jb_char_gs));
if (FALSE==find_fun_bijiao(jb_dz_qs+jb_jc_1+jb_sz[jb_jc].jb_char_py,jb_sz[jb_jc].jb_char_zz,jb_sz[jb_jc].jb_char_gs))
{
//DbgPrint("测试 = 0x%8x \n" ,(ULONG)(jb_dz_qs+jb_jc_1+jb_sz[jb_jc].jb_char_py));
jb_biaozhi=FALSE;
}
jb_jc++;
}
if (TRUE==jb_biaozhi)
{
jb_fh=jb_dz_qs+jb_jc_1+jb_jg_py;//找到了
break;
}
}
else //无附加条件
{
//DbgPrint("无附加条件\n" );
jb_fh=jb_dz_qs+jb_jc_1+jb_jg_py;//找到了
break;
}
}
jb_jc_1++;
}
return jb_fh;
}
VOID find_fun_qita()
{
ULONG jb_jg_dz=0;
//------------
jiegou_sousuo jb_sz_ObpCloseHandle[2];
UCHAR jb_sz_ObpCloseHandle_zz_0[]={0x83,0xec,0x1c,0x53,0x56,0x57,0xc6,0x45,0xff,0x00};
UCHAR jb_sz_ObpCloseHandle_zz_1[]={0x23,0xc8,0x3b,0xc8};
//-----------------------------
//qj_ObpCloseHandle
jb_sz_ObpCloseHandle[0].jb_char_zz=jb_sz_ObpCloseHandle_zz_0;
jb_sz_ObpCloseHandle[0].jb_char_py=0;
jb_sz_ObpCloseHandle[0].jb_char_gs=10;
jb_sz_ObpCloseHandle[1].jb_char_zz=jb_sz_ObpCloseHandle_zz_1;
jb_sz_ObpCloseHandle[1].jb_char_py=0x1D;
jb_sz_ObpCloseHandle[1].jb_char_gs=4;
//jb_jg_dz=find_fun_sousuo(0x804d8000+0xE533A,0x100,jb_sz_ObpCloseHandle,2,-0x5);//这里本来是要填写为0x804d8000+0x7C000这样的,但是不知道怎么的蓝屏,下次找原因
jb_jg_dz=find_fun_sousuo(0x804d8000+0x8C000,0xF0200,jb_sz_ObpCloseHandle,2,-0x5);//这里本来是要填写为0x804d8000+0x7C000这样的,但是不知道怎么的蓝屏,下次找原因
if (jb_jg_dz>0x80000000)
{
qj_ObpCloseHandle=jb_jg_dz;
}
DbgPrint("ObpCloseHandle= 0x%8x \n" ,qj_ObpCloseHandle);
//-----------------------------
}
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
在虚拟机里面运行没事,在本机上运行蓝屏,这是因为本机是双核的问题吗?如何解决呢
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
那位大哥大姐可以给小弟解解疑惑吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
我也遇到了这样的问题,是双核的问题.困扰了好几天。求高人解决
|
能力值:
( LV4,RANK:50 )
|
-
-
10 楼
你写的程序,这样肯定蓝屏的啊
有点怀疑楼主是不是故意的?
不管了,先回答吧。
不一样的机器,不一样的windows,它们的对象基地址都不一样。
而且每个对象在内存,会申请一个地址空间,但没申请内存。
SO,你要是读到此地方,就蓝了。
用以下函数。
MmIsAddressValid
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
楼主在代码中加入try{} catch(){} 调试一下 ,可能由于读取的地址是无效的或不可访问,而导致蓝屏...
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
同意9楼。
几种可能:
1. 你的这段代码运行在IRQL >= Dispatch level,这样在触发PageFault异常时,操作系统不能调度PageFault异常处理,导致蓝屏。
2. 你的这段代码运行在IRQL < Dispatch level,但是ntkrnlpa.exe模块在虚拟机、在你本机两种情况的基地址不同。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
同意9楼,同一模块在不同机器虚拟地址是不一样的
|