Как отладить BSOD с недействительной ссылкой на память, в частности, почему RSI был установлен в 0 - PullRequest
0 голосов
/ 07 января 2019

Мой ноутбук с Windows 10 недавно, почти ежедневно, BSODing, примерно в то время, когда я им не пользуюсь (это рабочий ПК, поэтому проблема возникает с 10 вечера до 6 утра). Все аварийные дампы выглядят одинаково:

IRQL_NOT_LESS_OR_EQUAL (a)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.
If a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: 0000000000002d30, memory referenced
Arg2: 00000000000000ff, IRQL
Arg3: 00000000000000e8, bitfield :
    bit 0 : value 0 = read operation, 1 = write operation
    bit 3 : value 0 = not an execute operation, 1 = execute operation (only on chips which support this level of status)
Arg4: fffff8011be4e0ff, address which referenced memory
...
DEFAULT_BUCKET_ID:  WIN8_DRIVER_FAULT
BUGCHECK_STR:  AV
PROCESS_NAME:  System
...
LAST_CONTROL_TRANSFER:  from fffff8011bf6bba9 to fffff8011bf59dc0
STACK_TEXT:  
fffff801`1dc625c8 fffff801`1bf6bba9 : 00000000`0000000a 00000000`00002d30 00000000`000000ff 00000000`000000e8 : nt!KeBugCheckEx
fffff801`1dc625d0 fffff801`1bf6855a : 0000006b`b0e5bb5a fffff801`1dc62940 00000000`00000002 fffff801`1bf3aecc : nt!KiBugCheckDispatch+0x69
fffff801`1dc62710 fffff801`1be4e0ff : 00000000`00000000 fffff801`1bfed7b6 ffffe001`9510d010 ffffe001`97fc14f0 : nt!KiPageFault+0x51a
fffff801`1dc628a0 fffff801`1be4d31b : 00000000`00000000 00000000`00000002 00000000`00000000 00000000`00000000 : nt!PpmIdleExecuteTransition+0xc2f
fffff801`1dc62b00 fffff801`1bf5d24c : 00000000`00000000 fffff801`1c126180 fffff801`1c19c740 ffffe001`9355c080 : nt!PoIdle+0x33b
fffff801`1dc62c60 00000000`00000000 : fffff801`1dc63000 fffff801`1dc5d000 00000000`00000000 00000000`00000000 : nt!KiIdleLoop+0x2c

0: kd> .trap fffff801`1dc62710
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=0000000000000000 rbx=0000000000000000 rcx=0000000000000012
rdx=0000000000000000 rsi=0000000000000000 rdi=0000000000000000
rip=fffff8011be4e0ff rsp=fffff8011dc628a0 rbp=0000000000000000
 r8=0000000000000000  r9=0000000000000000 r10=0000000000000000
r11=0000000000000000 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0         nv up di ng nz na po nc
nt!PpmIdleExecuteTransition+0xc2f:
fffff801`1be4e0ff 0fb686302d0000  movzx   eax,byte ptr [rsi+2D30h] ds:00000000`00002d30=??

И если я не ошибаюсь, я должен выяснить, почему RSI был установлен в 0, прежде чем произошла ошибка. И команда "u" показывает, что команда "call qword ptr [rbp + 198h]" могла предшествовать ошибке.

0: kd> ub rip L13
nt!PpmIdleExecuteTransition+0xbe3:
fffff801`1be4e0b3 4032ff          xor     dil,dil
fffff801`1be4e0b6 0fb686302d0000  movzx   eax,byte ptr [rsi+2D30h]
fffff801`1be4e0bd a801            test    al,1
fffff801`1be4e0bf 740f            je      nt!PpmIdleExecuteTransition+0xc00 (fffff801`1be4e0d0)
fffff801`1be4e0c1 a808            test    al,8
fffff801`1be4e0c3 750b            jne     nt!PpmIdleExecuteTransition+0xc00 (fffff801`1be4e0d0)
fffff801`1be4e0c5 33c0            xor     eax,eax
fffff801`1be4e0c7 b948000000      mov     ecx,48h
fffff801`1be4e0cc 33d2            xor     edx,edx
fffff801`1be4e0ce 0f30            wrmsr
fffff801`1be4e0d0 488b8518030000  mov     rax,qword ptr [rbp+318h]
fffff801`1be4e0d7 458bc4          mov     r8d,r12d
fffff801`1be4e0da 448b8d0c030000  mov     r9d,dword ptr [rbp+30Ch]
fffff801`1be4e0e1 8b54244c        mov     edx,dword ptr [rsp+4Ch]
fffff801`1be4e0e5 488b8c2480000000 mov     rcx,qword ptr [rsp+80h]
fffff801`1be4e0ed 4889442420      mov     qword ptr [rsp+20h],rax
fffff801`1be4e0f2 ff9598010000    call    qword ptr [rbp+198h]
fffff801`1be4e0f8 448be0          mov     r12d,eax
fffff801`1be4e0fb 89442444        mov     dword ptr [rsp+44h],eax
0: kd> u rip
nt!PpmIdleExecuteTransition+0xc2f:
fffff801`1be4e0ff 0fb686302d0000  movzx   eax,byte ptr [rsi+2D30h]
fffff801`1be4e106 a801            test    al,1
fffff801`1be4e108 7418            je      nt!PpmIdleExecuteTransition+0xc52 (fffff801`1be4e122)
fffff801`1be4e10a a808            test    al,8
fffff801`1be4e10c 7514            jne     nt!PpmIdleExecuteTransition+0xc52 (fffff801`1be4e122)
fffff801`1be4e10e 41b801000000    mov     r8d,1
fffff801`1be4e114 33d2            xor     edx,edx
fffff801`1be4e116 418bc0          mov     eax,r8d

Благодарим вас за руководство по дальнейшей отладке этого BSOD. Мое указание по устранению неполадок может быть ложным, и в этом случае я полностью заинтересован в вашей мысли. Заранее спасибо!

...