windows - Hvordan isolerer du et kernelopkald til et program ved hjælp af WinDbg?

Indlæg af Hanne Mølgaard Plasc

Problem

Jeg forsøger at bruge WinDbg til at fejle et kernelopkald, der opstår, når jeg læser et bestemt program. Der opstår en fejl inden i kernel-tilstandskoden. Kernelfunktioner er ekstremt almindelige opkald, der forekommer mange gange i sekundet på de mange processer, der kører på maskinen. Således, hvordan isolerer man et kernelopkald for at fejle det? Hvis jeg for eksempel placerer et breakpoint på nt! NtCreateSection eller ntdll! RtlEnterCriticalSection, vil WinDbg bryde så mange gange, at jeg ikke engang kan gå til operativsystemet og starte det pågældende program, fordi det vil bryde på opkaldene til disse funktioner, som alle andre programmer i hukommelsen bruger, snarere end for det målprogram, jeg forsøger at fejle. Angiv en metode til at løse dette problem og målrette mod en bestemt forekomst af et kernelopkald eller en anden løsning til dette problem.

Bedste reference

sxe ld dit modul.
når du bryder på dit modul
find eprocess med! proces 0 0 dit modul.
sæt processpecifik breakpoint
som bp / p eprocess symbol. eller hårdt lappe indgangspunktet for dit modul med 0xcc og følg derfra Du kan også debugere det med omdirigering ved hjælp af ntsd -d dit modul Du kan også tvinge symbolet indlæsning med! gflags + ksl hvis det er nødvendigt