[求助] 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)---蓝屏 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} 请前辈帮忙看看
movsxd r11,dword ptr
movsxd32位扩展为64位,具体是怎么实现的?网上都是一句带过,不知道原理 movsxd带符号扩展为64位
movsxd oper,immed
如果immed=0x0000000012345678
或者immed=0xFFFFFFFF12345678
执行后oper=? 找到原因了,是我手太欠,做调试的时候,改了GetSSDTAddress函数,忘了改回来。 我猜都是代码被改了。。。
顺带用那一坨SHELLCODE计算地址只是为了演示,实际上计算地址是不需要那一坨SHELLCODE的。 学这个太有深度了,一篇教程,调试了2天,才勉强明白。 [求助] WIN64汇编基础教程遇到的问题
发生蓝屏的代码是shellcode中的一句汇编:movsxd r11,dword ptr
这一句是怎么得到的。还有下面的汇编代码是怎么得到的?
我也遇到一样的问题了,加载作者编译好的MyDriver.sys,没有任何问题。把同样的代码,复制,自己重新编译生成的sys文件,却是蓝屏的。我没有改任何代码。
页:
[1]