WinDbg: Time Travel Debugging
IDA supports WinDbg Time-Travel debugging. When used with a compatible version of WinDbg, you can load a .run
file into IDA, similarly to a crash dump.
Installation
Only the standalone version of WinDbg supports Time Travel Debugging. The version of WinDbg from Debugging Tools for Windows can not be used to load TTD traces.
Downloading WinDbg
You can find the list of current ways to download WinDbg here: https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/
You can either install WinDbg onto your system or extract it manually.
Copying WinDbg files
WinDbg is an AppX package, and Windows by default forbids the execution of files in its installation folder. It is required to copy the files to another directory to use them with IDA.
You can find the installation directory for WinDbg by opening a PowerShell window and running:
For example, for version 1.2410.110001.0 the path might be C:\Program Files\WindowsApps\Microsoft.WinDbg_1.2410.11001.0_x64__8wekyb3d8bbwe
. In general, users do not have access to list the C:\Program Files\WindowsApps
folder by default, however it is possible to navigate to the WinDbg subfolder directly by pasting the path into Explorer.
Please copy the amd64
subdirectory into a directory of your choice and update the DBGTOOLS
path in ida.cfg
to point to the copied folder. The folder pointed to by DBGTOOLS
should contain a dbgeng.dll
file.
Manually extracting WinDbg files
If you do not want to install WinDbg onto your system, you can instead download and extract it manually by doing the following:
Download the .appinstaller file from https://aka.ms/windbg/download
Open the .appinstaller file as xml in a text editor. Take the value of
Uri=
on the line containing the<MainBundle
definition and download the file specified by it, e.g., from<MainBundle Name="Microsoft.WinDbg" Version="1.2410.11001.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Uri="https://windbg.download.prss.microsoft.com/dbazure/prod/1-2410-11001-0/windbg.msixbundle" />
download thehttps://windbg.download.prss.microsoft.com/dbazure/prod/1-2410-11001-0/windbg.msixbundle
file.Extract the
windbg_win-x64.msix
file from the downloaded .msixbundle (it is a zip file with a custom extension)Extract the
amd64
folder from thewindbg_win-x64.msix
file (it is a zip file with a custom extension)
Once you have followed these steps, update the DBGTOOLS
path in ida.cfg
to point to the copied folder. The folder pointed to by DBGTOOLS
should contain a dbgeng.dll
file.
Features
Time travel
The WinDbg time travel implementation uses a trace file that you later load. Unlike a crash dump you can still continue execution, however this works by navigating through a recorded instruction log. You cannot change registers or affect the program behavior.
Additional UI actions are available when loading a time travel log. You can use the UI to continue the execution both forwards and backwards by selecting either the normal "Continue" action, or the "Continue backwards" action. Additionally, the "Step into (backwards)", "Step over (backwards)", "Run to cursor (backwards)" actions become available, however they do not work with source-level debugging.
You can access these actions either using the toolbar or from the "Debugger" menu.
Commands
The !positions
command can be used to show the current position in the trace.
The !tt
command can be used to travel to a specific position in the trace that you have obtained before.
For more details, please see the Microsoft documentation page.
The dx
command can be used to query information about the trace, such as memory writes or reads to a specific address. See this tutorial for how to use it.
Last updated
Was this helpful?