Como eu defino um ponto de interrupção dentro do WlanSvc?

0

O meu WiFi continua a ficar desligado e controlo o meu computador com o Synergy. Eu examinei os logs de eventos e descobri que tudo começa com um WlanSvcDisconnectRequest (parte da execução do WlanSvc sob svchost). Estou bastante confiante de que não é uma falha de hardware.

Estou bastante enjoado e cansado de ter que reconectar meu dongle wifi para que ele se reconecte (pois o computador é controlado com o Synergy e não tem mouse / teclado conectado), então decidi tentar depurá-lo para ver se eu pudesse descobrir o que realmente está enviando o WlanSvcDisconnectRequest a cada poucos minutos.

Eu tentei o meu melhor para ver se eu poderia depurá-lo, mas não consigo definir o ponto de interrupção.

Estou usando a versão correta do WinDbg (64 bits) e executando-a como um processo elevado.

Eu o abri, encontrei o processo svchost que está executando o WlanSvc e tentei definir um ponto de interrupção:

0:013> bc *
0:013> bp wlansvc!WlanSvcDisconnectRequest
0:013> bl
 0 e 00007ff8'6d914ba8     0001 (0001)  0:**** wlansvc!WlanSvcDisconnectRequest
0:013> g
Unable to insert breakpoint 0 at 00007ff8'6d914ba8, Win32 error 0n998
    "Invalid access to memory location."
The breakpoint was set with BP.  If you want breakpoints
to track module load/unload state you must use BU.
bp0 at 00007ff8'6d914ba8 failed
WaitForEvent failed
ntdll!DbgBreakPoint+0x1:
00007ff8'75729921 c3              ret

Eu também tentei defini-lo como um ponto de interrupção não resolvido:

0:013> bc *
0:013> x wlansvc!WlanSvcDisconnectRequest
00007ff8'6d914ba8 wlansvc!WlanSvcDisconnectRequest = <no type information>
0:013> bu wlansvc!WlanSvcDisconnectRequest
0:013> g
Unable to insert breakpoint 0 at 00007ff8'6d914ba8, Win32 error 0n998
    "Invalid access to memory location."
bp0 at 00007ff8'6d914ba8 failed
WaitForEvent failed
ntdll!DbgBreakPoint+0x1:
00007ff8'75729921 c3              ret

Eu não usei o WinDbg antes, mas uma grande quantidade de Googling foi feita sem sucesso. Por que não consigo definir o ponto de interrupção para wlansvc!WlanSvcDisconnectRequest ?

Versão do WinDbg:

Microsoft (R) Windows Debugger Version 10.0.14321.1024 AMD64

Informações do sistema:

OS Name:                   Microsoft Windows 10 Pro
OS Version:                10.0.14393 N/A Build 14393
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Standalone Workstation
OS Build Type:             Multiprocessor Free

System Type:               x64-based PC
Processor(s):              1 Processor(s) Installed.
                           [01]: Intel64 Family 6 Model 15 Stepping 2 GenuineIntel ~1867 Mhz

Caminho do símbolo:

srv*;C:\Symbols\wlansvc.pdb

Atualização: Tentei desabilitar o ASLR com o EMETS, não ajudei a tentar definir o ponto de interrupção.

    
por Austin Burk 01.06.2017 / 00:43

1 resposta

1

O problema é que wlansvc!WlanSvcDisconnectRequest é, na verdade, uma estrutura de dados armazenada na seção .rdata de wlansvc.dll . Ele é armazenado em memória somente leitura e não contém nenhum código. Assim, criar um ponto de interrupção não faz qualquer sentido.

Você pode verificar isso pelo comando !address wlansvc!WlanSvcDisconnectRequest . Ele reportará PAGE_READONLY proteção de página para determinada região de memória.

Se você quiser quebrar quando algum código acessar essa estrutura, você precisará definir um ponto de interrupção de dados : ba r1 wlansvc!WlanSvcDisconnectRequest

Ou você pode simplesmente colocar o brakpoint padrão na função wlansvc!IntfDisconnect , já que este parece ser o único lugar que contém referência à wlansvc!WlanSvcDisconnectRequest structure (que pode ser encontrada usando IDA desassemblador por exemplo).

    
por 04.06.2017 / 18:36