faraway 发表于 2016-1-11 15:21:03

[求助] WIN64汇编基础教程[3-3]遇到的问题



        加载作者编译好的MyDriver.sys,没有任何问题。把同样的代码,复制,自己重新编译生成的sys文件,却是蓝屏的。
        我的用的编译环境:WDK8.1+VS2013
        发生蓝屏的代码是shellcode中的一句汇编:movsxd r11,dword ptr
       
        执行过程及执行代码后寄存器的值:
        格式:代码
              执行代码后寄存器值

        代码:        mov rax, rcx ;rcx=index
        寄存器:        rax=0000000000000023,        r10=fffff80001a0d888,        rdx=fffff8000187eff2
        代码:        lea r10, ;rdx=ssdt
        寄存器:        r10=fffff8000187eff2,         eax=23,                edi=d
        代码:        mov edi,eax
        寄存器:        edi=23
        代码:        shr edi,7
        寄存器:        edi=0
        代码:        and edi,20h
        寄存器:        edi=0
        代码:        mov r10, qword ptr
        寄存器:        r10=4c00237847158d4c
        代码:        movsxd r11,dword ptr        
        寄存器:        *** Fatal System Error: 0x0000007e
                     (0xFFFFFFFFC0000005,0xFFFFFA801B6E8532,0xFFFFF88001FD96A8,0xFFFFF88001FD8F00)---蓝屏

faraway 发表于 2016-1-11 15:24:35

dump文件
ADDITIONAL_DEBUG_TEXT:
You can run '.symfix; .reload' to try to fix the symbol path and load symbols.

MODULE_NAME: GetSSDT(我自己改了,不是MyDriver了)
FAULTING_MODULE: fffff8000180e000 nt

DEBUG_FLR_IMAGE_TIMESTAMP:569307ba

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - 0x%08lx

FAULTING_IP:
+416d320
fffffa80`1b6e8532 4d631c82      movsxdr11,dword ptr

EXCEPTION_RECORD:fffff88001fd96a8 -- (.exr 0xfffff88001fd96a8)
ExceptionAddress: fffffa801b6e8532
   ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
   Parameter: 0000000000000000
   Parameter: ffffffffffffffff
Attempt to read from address ffffffffffffffff

CONTEXT:fffff88001fd8f00 -- (.cxr 0xfffff88001fd8f00;r)
rax=0000000000000023 rbx=0000000000000000 rcx=0000000000000023
rdx=fffff8000187eff2 rsi=fffffa8019cfe000 rdi=0000000000000000
rip=fffffa801b6e8532 rsp=fffff88001fd98e8 rbp=0000000000000000
r8=fffffa801b6e8520r9=fffff80001a0d9f0 r10=4c00237847158d4c
r11=fffff88001fd98e8 r12=0000000000000001 r13=ffffffff800006e4
r14=fffffa801b51d0b0 r15=000000000000001c
iopl=0         nv up ei pl zr na po nc
cs=0010ss=0018ds=002bes=002bfs=0053gs=002b             efl=00010346
fffffa80`1b6e8532 4d631c82      movsxdr11,dword ptr ds:002b:4c002378`47158dd8=????????
Last set context:
rax=0000000000000023 rbx=0000000000000000 rcx=0000000000000023
rdx=fffff8000187eff2 rsi=fffffa8019cfe000 rdi=0000000000000000
rip=fffffa801b6e8532 rsp=fffff88001fd98e8 rbp=0000000000000000
r8=fffffa801b6e8520r9=fffff80001a0d9f0 r10=4c00237847158d4c
r11=fffff88001fd98e8 r12=0000000000000001 r13=ffffffff800006e4
r14=fffffa801b51d0b0 r15=000000000000001c
iopl=0         nv up ei pl zr na po nc
cs=0010ss=0018ds=002bes=002bfs=0053gs=002b             efl=00010346
fffffa80`1b6e8532 4d631c82      movsxdr11,dword ptr ds:002b:4c002378`47158dd8=????????
Resetting default scope

CUSTOMER_CRASH_COUNT:1

DEFAULT_BUCKET_ID:WIN7_DRIVER_FAULT

BUGCHECK_STR:0x7E

CURRENT_IRQL:0

ANALYSIS_VERSION: 6.3.9600.16384 (debuggers(dbg).130821-1623) amd64fre

LAST_CONTROL_TRANSFER:from fffff88007d50166 to fffffa801b6e8532

STACK_TEXT:
fffff880`01fd98e8 fffff880`07d50166 : 00000000`00000000 fffff800`0187eff2 00000000`00000080 fffff800`018bcec0 : 0xfffffa80`1b6e8532
fffff880`01fd98f0 00000000`00000000 : fffff800`0187eff2 00000000`00000080 fffff800`018bcec0 fffff880`00000000 : GetSSDT+0x1166


FOLLOWUP_IP:
GetSSDT+1166
fffff880`07d50166 ??            ???

SYMBOL_STACK_INDEX:1

SYMBOL_NAME:GetSSDT+1166

FOLLOWUP_NAME:MachineOwner

IMAGE_NAME:GetSSDT.sys

STACK_COMMAND:.cxr 0xfffff88001fd8f00 ; kb

BUCKET_ID:WRONG_SYMBOLS

FAILURE_BUCKET_ID:WRONG_SYMBOLS

ANALYSIS_SOURCE:KM

FAILURE_ID_HASH_STRING:km:wrong_symbols

FAILURE_ID_HASH:{70b057e8-2462-896f-28e7-ac72d4d365f8}

faraway 发表于 2016-1-11 15:29:08

请前辈帮忙看看
movsxd r11,dword ptr
movsxd32位扩展为64位,具体是怎么实现的?网上都是一句带过,不知道原理

faraway 发表于 2016-1-11 15:36:14

movsxd带符号扩展为64位
movsxd oper,immed
如果immed=0x0000000012345678
或者immed=0xFFFFFFFF12345678
执行后oper=?

faraway 发表于 2016-1-11 17:18:52

找到原因了,是我手太欠,做调试的时候,改了GetSSDTAddress函数,忘了改回来。

Tesla.Angela 发表于 2016-1-12 22:05:51

我猜都是代码被改了。。。
顺带用那一坨SHELLCODE计算地址只是为了演示,实际上计算地址是不需要那一坨SHELLCODE的。

faraway 发表于 2016-1-13 15:27:36

学这个太有深度了,一篇教程,调试了2天,才勉强明白。

ckernel 发表于 2018-5-27 22:10:18

[求助] WIN64汇编基础教程遇到的问题
发生蓝屏的代码是shellcode中的一句汇编:movsxd r11,dword ptr
这一句是怎么得到的。还有下面的汇编代码是怎么得到的?

我也遇到一样的问题了,加载作者编译好的MyDriver.sys,没有任何问题。把同样的代码,复制,自己重新编译生成的sys文件,却是蓝屏的。我没有改任何代码。
页: [1]
查看完整版本: [求助] WIN64汇编基础教程[3-3]遇到的问题