Accelerated Rust Windows Memory Dump Analysis Parts 1-2
Accelerated Rust Windows Memory Dump Analysis Parts 1-2
Dmitry Vostokov
Software Diagnostics Services
WinDbg Commands
Prerequisites We use these boxes to
introduce WinDbg commands
used in practice exercises
Lots of pictures
Lots of examples
User Space
00007FFF`FFFFFFFF
FFFF8000`00000000
Kernel Space
FFFFFFFF`FFFFFFFF
Notepad Notepad.exe
user32.dll
user32 win32u.dll
kernel32
ntdll ntdll.dll
00007FFF`FFFFFFFF
FFFF8000`00000000
Kernel Space
FFFFFFFF`FFFFFFFF
00007FF6`00000000
Notepad
user32
kernel32
00000000`00000000 ...
ntdll
00007FFF`FFFFFFFF FFFFFFFF`FFFFFFFF
FFFF8000`00000000
Kernel Space
nt
Driver
FFFFFFFF`FFFFFFFF
00007FF6`00000000
Notepad
Notepad.dmp
User Space (PID 7212)
win32u
user32
kernel32
ntdll
00007FFF`FFFFFFFF
FFFF8000`00000000
WinDbg Commands
Kernel Space
lmv command lists modules
nt
and their description
Driver
FFFFFFFF`FFFFFFFF
kernel32
user32
win32u
Notepad
ntdll_77b00000
User Space (PID 7212) User Space (PID 9940)
win32u
user32
wow64
kernel32
ntdll
ntdll WinDbg Commands
00007FFF`FFFFFFFF
FFFF8000`00000000 MEMORY.DMP
.process switches between
process virtual spaces (kernel
space part remains the same)
Kernel Space
nt
Driver
FFFFFFFF`FFFFFFFF
nt
Kernel Space
Driver
TID TID
102 204 WinDbg Commands
User Space (PID 306)
User Stack for TID 204 Process dumps:
User Stack for TID 102 !teb
user32 Data:
dc / dps / dpp / dpa / dpu
ntdll
nt
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();
...
}
Module+22000
Module+54000
ApplicationA
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/
Tools: NotMyFault
Counter: RCX
Stack: RSP
Examples:
RSP-0x20 → [RSP-0x20]
RSP-0x18 → [RSP-0x18]
Stack grows
RSP-0x10 → [RSP-0x10]
RSP-0x8 → [RSP-0x8]
RSP → [RSP]
RSP+0x8 → [RSP+0x8]
RSP+0x10 → [RSP+0x10]
RSP+0x18 → [RSP+0x18]
RSP+0x20 → [RSP+0x20]
Higher addresses
© 2024 Software Diagnostics Services
Memory Cell Sizes
RSP → BYTE PTR [RSP]
RSP+0x8 →
RSP+0x8 →
RSP+0x8 →
Opcode DST
Examples:
Opcode DST|SRC
Examples:
Examples:
impl Struct {
fn func(&self, ...);
}
© 2024 Software Diagnostics Services
Windows API Parameters
x64: Left to right RCX, RDX, R8, R9, stack
WinDbg Commands
0:000> kv
# Child-SP RetAddr : Args to Child : Call Site
…
Exercise Transcripts:
\ARWMDA-Dumps\Exercise-RW1.pdf
\ARWMDA-Dumps\Exercise-RW2.pdf
\ARWMDA-Dumps\Exercise-RW3.pdf