首页
社区
课程
招聘
[求助][求助]KeLowerIrql总是失败
发表于: 2010-6-12 11:13 5530

[求助][求助]KeLowerIrql总是失败

2010-6-12 11:13
5530
RtlCopyMemory(OriginalHead2,(PVOID)0x8053e621,5);
*(ULONG *)(ReplaceHead2+1)=(ULONG)FakeKiFastCallEntry-(0x8053e621+5);
KIRQL Irql;
ULONG Cr0Value;
Irql=KeGetCurrentIrql();
if (Irql<=DISPATCH_LEVEL)
{

  _asm
  {
  push eax
  mov eax,cr0;
  mov Cr0Value,eax
  and eax,0fffeffffh
  mov cr0,eax
  pop eax
  }
    
  Irql=KeRaiseIrqlToDpcLevel();
  RtlCopyMemory((PVOID)0x8053e621,ReplaceHead2,5);
  KeLowerIrql(Irql);
  _asm
  {
    push eax
    mov eax,Cr0Value;
    mov cr0,eax;
    pop eax

  }    
}

上面代码中调用KeLowerIrql(Irql);这句失败,报错访问异常。
这段代码在Hook,另一个Ob函数时候并没有问题,但是不知道为什么patch 这个函数时候KeLowerIrql
总是失败。难道跟patch哪个函数还有影响?
求前辈指点下,在此先谢谢了!~~~~~~~

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 59
活跃值: (41)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
刚测试了下,发现应该是RtlCopyMemory((PVOID)0x8053e621,ReplaceHead2,5);
这句导致的,把这句改成写别的函数头就没问题。是硬编码的问题吗?
我硬编码了一下要patch的地方,这样做难道会导致什么问题?
2010-6-12 16:29
0
雪    币: 59
活跃值: (41)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
额找到原因了,kelowerIrql从DpcLevel降低到passive,应该是触发了线程调度程序,而调度程序正好要调用kifastcallentry,而我的fakekifastcallentry里面出错了,所以挂了............
2010-6-12 17:05
0
游客
登录 | 注册 方可回帖
返回
//