首页
社区
课程
招聘
[求助]64位的KeWaitForSingleObject
发表于: 2016-12-21 00:47 4212

[求助]64位的KeWaitForSingleObject

2016-12-21 00:47
4212
语言乏力 不好表达 例如下面这段代码
这样写没问题
        mov     ecx,80000003h
        mov     edx,1
        mov     r8,qword ptr [rbp+0E8h]
        dec     r8
        mov     r9d,0
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        push ovcallret_nt_KiBreakpointTrap_to_KiExceptionDispatch
        jmp diy_idt_KiExceptionDispatch
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        nop
        nop word ptr [rax+rax]

这样写就出问题了
        mov     ecx,80000003h
        mov     edx,1
        mov     r8,qword ptr [rbp+0E8h]
        dec     r8
        mov     r9d,0
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        call diy_idt_KiExceptionDispatch
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        nop
        nop word ptr [rax+rax]
原因是卡在KeWaitForSingleObject
而 KeWaitForSingleObject 内部则一直卡在 KiCommitThreadWait 这个函数 被反复调用 一直跳不出

KiCommitThreadWait  内部太庞大了
大概原因是 有调用堆栈检测 下硬断可以断下来 发现调用堆栈不正确就死循环了 但有些地方又不会 有些又会 总之莫名其妙

有没有大佬能干掉这个问题

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

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 41
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
懒得你们抄函数了 不信的话可以自己试一下 这是win7的int3中断

diy_idt_KiBreakpointTrap PROC

KiBreakpointTrap:
        sub     rsp,8
        push    rbp
        sub     rsp,158h
        lea     rbp,[rsp+80h]
        mov     byte ptr [rbp-55h],1
        mov     qword ptr [rbp-50h],rax
        mov     qword ptr [rbp-48h],rcx
        mov     qword ptr [rbp-40h],rdx
        mov     qword ptr [rbp-38h],r8
        mov     qword ptr [rbp-30h],r9
        mov     qword ptr [rbp-28h],r10
        mov     qword ptr [rbp-20h],r11
        test    byte ptr [rbp+0F0h],1
        je      @KiBreakpointTrap_0xa1         ;;-------------------
        swapgs
        mov   r10,qword ptr gs:[188h]
        test    byte ptr [r10+3],80h
        je      @KiBreakpointTrap_0x8c         ;;-------------------
        mov     ecx,0C0000102h
        rdmsr
        shl     rdx,20h
        or      rax,rdx
        cmp     qword ptr [r10+0B8h],rax
        je      @KiBreakpointTrap_0x8c         ;;-------------------
        cmp     qword ptr [r10+1B0h],rax
        je      @KiBreakpointTrap_0x8c         ;;-------------------
        mov     rdx,qword ptr [r10+1B8h]
        bts     dword ptr [r10+4Ch],0Bh
        dec     word ptr [r10+1C4h]
        mov     qword ptr [rdx+80h],rax
@KiBreakpointTrap_0x8c:
        test    byte ptr [r10+3],3
        mov   word ptr [rbp+80h],0
        je      @KiBreakpointTrap_0xa1         ;;-------------------
        call    of_nt_KiSaveDebugRegisterState         ;;===================
@KiBreakpointTrap_0xa1:
        cld
        stmxcsr dword ptr [rbp-54h]
        ldmxcsr dword ptr gs:[180h]
        movaps  xmmword ptr [rbp-10h],xmm0
        movaps  xmmword ptr [rbp],xmm1
        movaps  xmmword ptr [rbp+10h],xmm2
        movaps  xmmword ptr [rbp+20h],xmm3
        movaps  xmmword ptr [rbp+30h],xmm4
        movaps  xmmword ptr [rbp+40h],xmm5
        test qword ptr [rbp+0F8h],200h
        je      @KiBreakpointTrap_0xd5         ;;-------------------
        sti
@KiBreakpointTrap_0xd5:
        mov     ecx,80000003h
        mov     edx,1
        mov     r8,qword ptr [rbp+0E8h]
        dec     r8
        mov     r9d,0
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        push ovcallret_nt_KiBreakpointTrap_to_KiExceptionDispatch
        jmp diy_idt_KiExceptionDispatch
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        nop
        nop word ptr [rax+rax]

diy_idt_KiBreakpointTrap ENDP
2016-12-21 00:51
0
雪    币: 41
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
中断调用堆栈跟原始不同一定死锁 但是不只中断 其它一些地方也会 但是为数并不多 总之莫名其妙 搞了几天都没个结果
2016-12-21 00:52
0
游客
登录 | 注册 方可回帖
返回