github x64dbg/x64dbg 2025.08.19

12 days ago

August 2025: Bug fixes and stability

This release has mostly been focused on fixing bugs and improving stability over the long term.

🐛 Bugs

The migration to Visual Studio 2022 unfortunately caused some serious issues to slip through. The following bugs were fixed:

  • Systems with older versions of the Visual C++ Redistributable would crash when you started debugging.
  • Pattern finding was completely broken.
  • Systems with AVX-512 would crash when using x32dbg.
  • CPUs AVX support would always show 0 for XMM registers (thanks to @CXVUSER).

To prevent critical issues like this from slipping through we are working on an automated test system. The headless version of x64dbg introduced in the previous release was a first step in this direction, but much more work is required. This release also introduced support for AddressSanitizer, which helps prevent memory safety issues.

❓ Documentation

The documentation has now been moved to the docs folder in the x64dbg repository. This streamlines development, but also makes the project much more LLM-friendly. Practically-speaking this means you can now ask questions about x64dbg in DeepWiki and expect reasonably-useful results!

Ask DeepWiki

Some example questions:

Obviously this is no replacement for reading the documentation, but it might at least point you to some concepts to research!

🔎 Tracing

There have been quite a lot of updates to the trace recording feature over the past few months by @torusrxxx. For those not familiar, trace recording allows you to capture the registers and memory accesses for every step of the program. Think Time Travel Debugging, but on a much smaller scale. This feature can be helpful trying to understand the data flow or figuring out where a specific value first pops up when executing a function.

To start a trace recording, use Help -> Trace into... and then enable the Record trace checkbox:

You can see a reconstruction of the memory/stack (best effort, might be slow on larger traces):

This version introduces support to search for intermodular calls in the trace, which can be useful to understand where APIs get called. A blog post with more details will follow!

🤖 Scripting

❗ You might want to check out Analysis at Scale with x64dbg Automate, which introduces a Python library to automate x64dbg. There is also an MCP Server built on top of it, which allows LLMs to interact with x64dbg.

The builtin scripting feature has always been a bit lackluster, but the need for testing automation has pushed things forward. Improved command line handling was introduced by @peace-maker and you can now specify a script to execute on debuggee startup:

  x64dbg {OPTIONS} [filename] -- [extra arguments]

    x64dbg

  OPTIONS:

    -workingDir  Current working directory of new process.
    Defaults to current working directory if not specified. (optional)
    -pid         Process ID to attach to. (optional)
    -tid         Thread Identifier (TID) of the thread to resume
    after attaching (PLMDebug). (optional)
    -event       Handle to an Event Object to signal (JIT). (optional)
    -c           Command to execute Specifies the initial
    debugger command to run at start-up. (optional)
    -cf          Specifies the path and name of a script file.
    This script file is executed immediately on startup. (optional)
    -p           Alias for -pid. (optional)
    -a           Alias for -pid. (optional)
    -e           Alias for -event (optional)
    -help        Show this message. (optional)

The scripting system has been rewritten from scratch to execute all of the script commands on an event loop, which ensures everything executes in a deterministic order. A lot of bugs have been fixed too, which enables more complex scripting scenarios:

fn = RtlEnterCriticalSection
bp fn
SetBreakpointCommand fn, "scriptcmd call analyze"
ret

analyze:
  SpinCount = ReadPtr(rcx + 0x20)
  log "SpinCount: {u:SpinCount}"
  ret

The script above sets a breakpoint on RtlEnterCriticalSection. It uses a breakpoint command to execute the analyze function in the script every time the breakpoint hits, and performs some logging. For testing we can use the headless command line tool with test executables and scripts to make sure everything works as expected.

🐧 Cross Platform

Thanks to @eldarkg you can now build x64dbg in Wine with a custom CMake toolchain. Additionally the first iteration of the cross-platform branch has been merged. Slowly the GUI components will be ported to an x64dbg::widgets library that can be reused for other projects.

🤝 Community

x64dbg is a community-driven project, and this release would not have been possible without the incredible work of our contributors. A huge thank you to everyone who contributed code, reported bugs, and helped shape this release ❤️

We recently revamped the Discord community, which you can join below:

Other platforms are synchronized with the #general channel:

Slack Gitter Matrix IRC

❤️ Sponsors

This project is also made possible by the generous support of sponsors. We would like to give a special shout out to the following sponsors:

Also many thanks to my active sponsors: @LabGuy94, @grant-h, @MorpheusH3x, @re-jevi, @adam-the, @verdeckt, @emesare, @daaximus, @stevemk14ebr, @as0ni, @sedrakpc, @Dan0xE, @Invoke-RE, @leandrofroes, @shu-tom, @buzzer-re, @expend20, @crudd, @clayne, @fr0zenbag, @dzzie

If you find x64dbg valuable in your work, please consider becoming a sponsor. Your support directly funds development and helps us continue to build the future of debugging. For companies we also offer custom services depending on the level of sponsorship, please reach out for more details!

📜 Changelog

  • InitializeSignatureCheck now loads msvcp140.dll
  • Always load VC runtime from application directory #3616
  • Move https://github.com/x64dbg/docs into this repo
  • Fix snapshot timestamp format
  • Fix AVX-512 crash on 32-bit
  • Exclude unnecessary OpenGL libraries from snapshot
  • Fix bug with string formatting
  • Fix ambiguous operand size when hiding pointer sizes by @kalhotky in #3620
  • Display style values refactor and MASM style by @kalhotky in #3617
  • Revert "Fixed inverted logic" by @mrexodia in #3622
  • Improve developer experience when forking
  • Improve CONTRIBUTING guide
  • Another attempt to fix msvcp140 loading #3624
  • Unbreak x32dbg after last commit
  • Fixed pattern search by @OldGamesCracking in #3628
  • Add back -DX64DBG, closes #3634
  • Update resources translations by @torusrxxx in #3562
  • Faster disasmgetstringatwrapper by @d2k2-git in #3625
  • Fix deleting breakpoint at module base address by @kalhotky in #3629
  • Fix symbolic name help URL encoding by @kalhotky in #3630
  • Fix fastresume hiding other summary text by @kalhotky in #3631
  • Disasm value notation by @kalhotky in #3640
  • Fix incorrect "None" label for disabled trace coverage in shortcuts by @adityaxa in #3638
  • Refactor QZydis instance in Bridge class by @mrexodia in #3641
  • Automatically cancel previous workflow runs on the same branch
  • align char buffer sizes with defined limit in GuiGetDisassembly by @d2k2-git in #3627
  • Fix autocomment precedence by @kalhotky in #3632
  • Fix mnemonic brief column #3510, #3509
  • MSVC build under linux wine by @eldarkg in #3657
  • Use library for command line parsing by @peace-maker in #3516
  • Fix headless initialization and thread model
  • msvc-wine: Fix: LINK : fatal error LNK1158: cannot run 'rc.exe' by @eldarkg in #3660
  • Do not produce an import library for exe target #3663
  • Add clang-tidy configuration
  • Show struct widget in DisplayTypeDialog
  • Misc improvements
  • Fix bug where disabling and reenabling GUI updates didn't update the GUI properly
  • Make breakpoint silent if breakpoint command execution fails
  • JobQueue.await now recursively calls job function when called on worker thread
  • Greatly improve script state handling
  • Export table to tab-separated values by @torusrxxx in #3666
  • Support adjusting font size via ctrl+wheel in RegistersView by @torusrxxx in #3665
  • Intermodular calls: add column for module name (#3664)
  • Properly synchronize breakpoint commands and script state
  • Allow using VirtualQueryEx in MemIsCodePage and enable it everywhere
  • Msvc wine build x64 architecture (#3669)
  • Patch file: fix wine usage by @eldarkg in #3679
  • Unity build by @mrexodia in #3674
  • Follow in stack in trace registers view; fix shortcuts in registers view by @torusrxxx in #3670
  • Search for intermodular calls in trace by @torusrxxx in #3672
  • Goto dialog: add completion for labels by @dabeibao in #3681
  • Upgrade _WIN32_WINNT to Windows 7 by @torusrxxx in #3668
  • Fix code formatting
  • Remove dbghelp/DeviceNameResolver/TitanEngine from pluginsdk #3412
  • Add some cross platform example projects by @mrexodia in #3224
  • Simplify licenses sections of the docs to use links instead
  • Fix struct view refreshing and add error message when connection fails
  • Add support for sanitizers and fix a crash
  • Update debug engines to 2025.08.18
  • Release notes dialog by @mrexodia in #3686

Full commit history: 2025.06.30...2025.08.19

Don't miss a new x64dbg release

NewReleases is sending notifications on new releases.