Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Version 4.0
Dmitry Vostokov
Software Diagnostics Services
WinDbg Commands
Day 2
Day 4
Day 2
Day 4
User Space
7FFFFFFF
80000000
Kernel Space
FFFFFFFF
User Space
000007FF`FFFFFFFF
FFFF8000`00000000
Kernel Space
FFFFFFFF`FFFFFFFF
Notepad
user32.dll
Notepad.exe
user32
7FFFFFFF
80000000
Kernel Space
FFFFFFFF
User Space
7FFFFFFF
80000000
nt
Driver.sys
Kernel Space
Ntoskrnl.exe
Driver
FFFFFFFF
Notepad
7FFFFFFF
80000000
nt
Kernel Space
Driver
FFFFFFFF
Notepad
user32
7FFFFFFF
80000000
WinDbg Commands
nt
lmv command lists modules
and their description
Kernel Space
Driver
FFFFFFFF
Notepad
WinDbg Commands
user32
7FFFFFFF
80000000
nt
Driver
FFFFFFFF
user32
user32
7FFFFFFF
80000000 MEMORY.DMP
nt
Kernel Space
Driver
FFFFFFFF
WinDbg Commands
TID
User Space (PID 306) 204 Process dumps:
TID
102 ~<n>s switches between
threads
user32
Kernel/Complete dumps:
ntdll ~<n>s switches between
processors
.thread switches between
threads
nt
Kernel Space
Driver
WinDbg Commands
User Space (PID 306) Kernel/Complete dumps:
~<n>s switches between
processors
user32 .thread switches between
threads
ntdll
nt
Driver
nt Data:
dc / dps / dpp / dpa / dpu
Kernel Space
Kernel Stack for TID 102
Driver
Module!FunctionA
Module!FunctionB
Return address Module!FunctionA+110
Module!FunctionC
Module!FunctionD
FunctionC()
{
Return address Module+32220 ... No symbols for Module
FunctionD();
...
} WinDbg Commands
Module+22000
0:000> k
Resumes from address Saves return address Module+0
Module+22110 Module+22110 Module+43130
Module+32220
Module+32000
Return address Module+22110 Module+22110
Resumes from address Saves return address
Module+32220 Module+32220
Module+43000
Module+54000
ApplicationA
WinDbg Commands
User Space (PID 306)
address=????????
Minvalid memory access
Set exception context
ModuleA (process dump):
TID .cxr
102
TID Set trap context
204 (kernel/complete dump):
.trap
User Stack for TID 102 Check address:
!pte
User Space (PID 306)
User Stack for TID 204
user32
ntdll
user32
ntdll
Problem Resolution
Debugging Strategy
Checklist: http://www.dumpanalysis.org/windows-memory-analysis-checklist
Patterns: http://www.dumpanalysis.org/blog/index.php/crash-dump-analysis-patterns/
Exercise Transcripts:
\AWMDA-Dumps\Exercise-0-Download-Setup-WinDbg.pdf
\AWMDA-Dumps\Exercise-Legacy.0-Download-Setup-
WinDbg.pdf
Exercises P1 – P17
\AWMDA-Dumps\Exercise-P1-Analysis-normal-process-
dump-notepad-32.pdf
\AWMDA-Dumps\Exercise-Legacy.P1-Analysis-normal-
process-dump-notepad-32.pdf
\AWMDA-Dumps\Exercise-P2-Analysis-normal-process-
dump-notepad-64.pdf
\AWMDA-Dumps\Exercise-Legacy.P2-Analysis-normal-
process-dump-notepad-64.pdf
\AWMDA-Dumps\Exercise-P3-Analysis-normal-process-
dump-MicrosoftEdge-64.pdf
\AWMDA-Dumps\Exercise-Legacy.P3-Analysis-normal-
process-dump-iexplore-32.pdf
\AWMDA-Dumps\Exercise-P4-Analysis-process-dump-
ApplicationK-64-no-symbols.pdf
\AWMDA-Dumps\Exercise-Legacy.P4-Analysis-process-
dump-ApplicationK-32-no-symbols.pdf
\AWMDA-Dumps\Exercise-P5-Analysis-process-dump-
ApplicationK-64-with-symbols.pdf
\AWMDA-Dumps\Exercise-Legacy.P5-Analysis-process-
dump-ApplicationK-32-with-symbols.pdf
\AWMDA-Dumps\Exercise-P6-Analysis-process-dump-
ApplicationL-32.pdf
\AWMDA-Dumps\Exercise-Legacy.P6-Analysis-process-
dump-ApplicationL-32.pdf
\AWMDA-Dumps\Exercise-P7-Analysis-process-dump-
ApplicationL-64.pdf
\AWMDA-Dumps\Exercise-Legacy.P7-Analysis-process-
dump-ApplicationL-64.pdf
\AWMDA-Dumps\Exercise-P8-Analysis-process-dump-
ApplicationM-64.pdf
\AWMDA-Dumps\Exercise-Legacy.P8-Analysis-process-
dump-ApplicationM-32.pdf
\AWMDA-Dumps\Exercise-P9-Analysis-process-dump-
ApplicationN-64.pdf
\AWMDA-Dumps\Exercise-Legacy.P9-Analysis-process-
dump-ApplicationN-64.pdf
Thread 1
(owns)
Thread 2
(owns)
Thread 2
Critical Section
00007ff676f399d8
Thread 1
(waiting)
\AWMDA-Dumps\Exercise-P10-Analysis-process-dump-
ApplicationO-64.pdf
\AWMDA-Dumps\Exercise-Legacy.P10-Analysis-process-
dump-ApplicationO-64.pdf
\AWMDA-Dumps\Exercise-P11-Analysis-process-dump-
ApplicationP-64.pdf
\AWMDA-Dumps\Exercise-Legacy.P11-Analysis-process-
dump-ApplicationP-32.pdf
\AWMDA-Dumps\Exercise-P12-Analysis-process-dump-
ApplicationR-32.pdf
\AWMDA-Dumps\Exercise-P13-Analysis-process-dump-
ApplicationA-64.pdf
\AWMDA-Dumps\Exercise-Legacy.P13-Analysis-process-
dump-ApplicationA-32.pdf
\AWMDA-Dumps\Exercise-P14-Analysis-process-dump-
ApplicationS-64.pdf
\AWMDA-Dumps\Exercise-Legacy.P14-Analysis-process-
dump-ApplicationS-32.pdf
EXE DLL
Data types
\AWMDA-Dumps\Exercise-P15-Analysis-process-dump-
notepad-32.pdf
\AWMDA-Dumps\Exercise-Legacy.P15-Analysis-process-
dump-notepad-32.pdf
\AWMDA-Dumps\Exercise-P16-Analysis-process-dump-
notepad-64.pdf
\AWMDA-Dumps\Exercise-Legacy.P16-Analysis-process-
dump-notepad-64.pdf
\AWMDA-Dumps\Exercise-P17-Analysis-process-dump-
ApplicationQ-32.pdf
\AWMDA-Dumps\Exercise-Legacy.P17-Analysis-process-
dump-ApplicationQ-32.pdf
Exercises K1 – K5
\AWMDA-Dumps\Exercise-K1-Analysis-normal-kernel-dump-
64.pdf
\AWMDA-Dumps\Exercise-Legacy.K1-Analysis-normal-
kernel-dump-32.pdf
\AWMDA-Dumps\Exercise-K2-Analysis-kernel-dump-leak-
64.pdf
\AWMDA-Dumps\Exercise-Legacy.K2-Analysis-kernel-dump-
leak-32.pdf
\AWMDA-Dumps\Exercise-K3-Analysis-kernel-dump-pool-
corruption-64.pdf
\AWMDA-Dumps\Exercise-Legacy.K3-Analysis-kernel-dump-
pool-corruption-32.pdf
\AWMDA-Dumps\Exercise-K4-Analysis-kernel-dump-code-
corruption-64.pdf
\AWMDA-Dumps\Exercise-Legacy.K4-Analysis-kernel-dump-
code-corruption-32.pdf
\AWMDA-Dumps\Exercise-K5-Analysis-kernel-dump-hang-
io-64.pdf
\AWMDA-Dumps\Exercise-Legacy.K5-Analysis-kernel-dump-
hang-io-32.pdf
Exercises C1 – C4
WinDbg Commands
dump all stack traces:
!process 0 3f
User Space
View commands
Dump everything or selected processes and threads (context changes automatically)
Switch commands
Switch to a specific process or thread for a fine-grain analysis
!process 0 1f
The same as the previous command but without PEB information (more secure)
!thread <address> 1f
Shows thread information and stack trace
!thread <address> 16
The same as the previous command but shows the first 3 parameters for every function
.thread <address>
Switches to a specified thread. Assumes the current process context
Now we can use commands like k*
.thread /r /p <address>
The same as the previous command but makes the thread process context current and reloads
symbol files for user space:
\AWMDA-Dumps\Exercise-C1-Analysis-normal-complete-
dump-64.pdf
AWMDA-Dumps\Exercise-Legacy.C1-Analysis-normal-
complete-dump-32.pdf
\AWMDA-Dumps\Exercise-C2-Analysis-problem-complete-
dump-64.pdf
\AWMDA-Dumps\Exercise-Legacy.C2-Analysis-problem-
complete-dump-32.pdf
\AWMDA-Dumps\Exercise-C3-Analysis-problem-complete-
dump-64.pdf
Mutant
ffffe00019be39f0
Thread
ffffe00017a83080
(owns)
Thread
Thread ffffe00017a88080
ffffe00017a83080 (waiting)
Critical Section
00007ff6590d5968
Thread
ffffe00019be4080
(owns)
\AWMDA-Dumps\Exercise-C4-Analysis-problem-complete-
dump-64.pdf
Exercise A1
\AWMDA-Dumps\Exercise-A1-Analysis-problem-active-
dump-64.pdf
Also another pattern is present in Legacy.C2 memory dump (not shown in the
exercise transcript):
http://www.dumpanalysis.org/blog/index.php/pattern-cooperation/
Advanced Windows Memory Dump Analysis with Data Structures, 2nd edition