x64dbg/x32dbg Reverse Engineering Skill
Expert knowledge base for reverse engineering with x64dbg or x32dbg through MCP.
When to Use
Activate this skill when:
- Analyzing binary executables on Windows
- Debugging applications with x64dbg/x32dbg
- Unpacking protected binaries
- Hunting for vulnerabilities
- Reverse engineering algorithms or protocols
- Monitoring API calls and system behavior
- Patching binary code
Available MCP Tools (79 total)
Debug Control (10 tools)
debug_get_state - Check debugger state (paused/running/stopped)
debug_init - Start a new debug session by loading an executable (params: path?, arguments?, current_dir?)
debug_run - Continue execution
debug_pause - Break execution
debug_step_into - Single step into calls
debug_step_over - Single step over calls
debug_step_out - Execute until function returns
debug_run_to - Run to specific address (param: address)
debug_restart - Restart the debug session
debug_stop - Stop debugging
Registers (4 tools)
register_get - Read one register (param: name)
register_set - Write register (params: name, value)
register_list - List all registers (optional: general_only)
register_get_batch - Read multiple registers (param: names array)
Memory (7 tools)
memory_read - Read memory (params: address, size; optional: encoding)
memory_write - Write memory (params: address, data; optional: encoding)
memory_search - Search pattern (param: pattern; optional: start, end, max_results)
memory_get_info - Region info (param: address)
memory_enumerate - List all regions
memory_allocate - Allocate memory (param: size)
memory_free - Free memory (param: address)
Breakpoints (11 tools)
breakpoint_set - Set breakpoint (param: address; optional: type, enabled)
breakpoint_delete - Remove breakpoint (param: address)
breakpoint_enable / breakpoint_disable / breakpoint_toggle
breakpoint_list - List all breakpoints
breakpoint_get - Get details (param: address)
breakpoint_delete_all - Remove all
breakpoint_set_condition - Set condition (params: address, condition)
breakpoint_set_log - Set log message (params: address, log_text)
breakpoint_reset_hitcount - Reset counter (param: address)
Disassembly (3 tools)
disassembly_at - Disassemble at address (params: address, count)
disassembly_function - Disassemble entire function (param: address)
disassembly_range - Disassemble range (params: start, end)
Symbols (7 tools)
symbol_resolve - Name to address (param: symbol)
symbol_from_address - Address to name (param: address)
symbol_search - Search symbols (param: pattern)
symbol_list - List symbols (optional: module)
symbol_set_label - Set label (params: address, label)
symbol_set_comment / symbol_get_comment
Modules (5 tools)
module_list - All loaded modules
module_get - Module info (param: module)
module_get_main - Main executable module
module_get_exports - List module exports (param: module)
module_get_imports - List module imports (param: module)
Threads (7 tools)
thread_list - All threads
thread_get_current - Current thread
thread_switch - Switch thread (param: thread_id)
thread_get - Thread info (param: thread_id)
thread_suspend / thread_resume / thread_get_count
Stack (4 tools)
stack_get_trace - Call stack trace
stack_read_frame - Read stack frame (params: address, size)
stack_get_pointers - RSP/RBP values on x64, ESP/EBP values on x86
stack_is_on_stack - Check address (param: address)
Dump (5 tools)
dump_module - Dump module to file with PE rebuild and optional OEP override
dump_memory_region - Dump raw memory region
dump_analyze_module - PE analysis with entropy and packer detection
dump_detect_oep - Detect Original Entry Point via pattern analysis
dump_get_dumpable_regions - List dumpable regions
Script (3 tools)
script_execute - Run an x64dbg/x32dbg command (param: command)
script_execute_batch - Run batch commands (param: commands array)
script_get_last_result - Get last result
Context Snapshots (3 tools)
context_get_snapshot - Full state capture
context_get_basic - Quick register + state check
context_compare_snapshots - Diff two snapshots
Expression Evaluation (1 tool)
eval_expression - Evaluate x64dbg/x32dbg expressions (param: expression) — supports math, symbols, native registers, and architecture-neutral aliases such as cip/csp (for example, [csp+8])
Cross-References (1 tool)
xref_get - Get cross-references to an address (param: address)
Function Analysis (2 tools)
function_list - List all recognized functions (optional: module filter)
function_get - Get function boundaries at address (param: address)
Assembler (1 tool)
assembler_assemble - Assemble instruction to bytes (params: instruction, address; optional: write_to_memory)
Bookmarks (3 tools)
bookmark_set - Set bookmark (param: address)
bookmark_delete - Delete bookmark (param: address)
bookmark_list - List all bookmarks
Patch Management (2 tools)
patch_list - List all applied byte-level patches
patch_restore - Restore original bytes at address (param: address)
x64dbg/x32dbg Log Format Syntax
When using breakpoint_set_log, format strings use these placeholders:
{REG} - Register value in hex (e.g., {RAX}, {RCX})
{REG:x} - Explicit hex format
{[ADDR]} - Dereference pointer at address
{[ADDR]:us} - Read as Unicode string
{[ADDR]:as} - Read as ASCII string
{[REG+OFFSET]} - Register + offset dereference
x64 fastcall parameter logging
"FuncName: p1={RCX} p2={RDX} p3={R8} p4={R9} ret={[RSP]:x}"
x86 stdcall parameter logging
"FuncName: p1={[ESP+4]:x} p2={[ESP+8]:x} p3={[ESP+C]:x}"
Common Reverse Engineering Patterns
Identifying Calling Conventions
- x64 fastcall (Windows): RCX, RDX, R8, R9, then stack. Return in RAX.
- x86 cdecl: All params on stack, caller cleans. Return in EAX.
- x86 stdcall (WinAPI): All params on stack, callee cleans. Return in EAX.
- x86 thiscall (C++): ECX = this pointer, rest on stack.
Recognizing Crypto Constants
| Constant |
Algorithm |
| 0x67452301, 0xEFCDAB89 |
MD5 / SHA-1 init |
| 0x6A09E667, 0xBB67AE85 |
SHA-256 init |
| 0x61707865 ("expa") |
ChaCha20 / Salsa20 |
| 0xEDB88320 |
CRC32 (reflected) |
| 0x04C11DB7 |
CRC32 (normal) |
| 0x9E3779B9 |
TEA / XTEA golden ratio |
Windows Debug Heap Fill Patterns
| Pattern |
Meaning |
| 0xCCCCCCCC |
Uninitialized stack (MSVC debug) |
| 0xCDCDCDCD |
Uninitialized heap (MSVC debug) |
| 0xDDDDDDDD |
Freed heap memory |
| 0xFEEEFEEE |
Freed heap (Windows debug heap) |
| 0xFDFDFDFD |
Heap guard bytes (buffer boundaries) |
| 0xBAADF00D |
LocalAlloc uninitialized |
| 0xDEADBEEF |
Common debug marker |
Anti-Debug Detection Points
kernel32.IsDebuggerPresent - Check PEB.BeingDebugged
ntdll.NtQueryInformationProcess - ProcessDebugPort (0x7)
kernel32.CheckRemoteDebuggerPresent
- PEB.NtGlobalFlag (0x70 = debugger attached)
- Timing checks:
rdtsc, QueryPerformanceCounter, GetTickCount
1---2name: x64dbg-x32dbg-reverse-engineering3description: This skill should be used when performing binary analysis, debugging, reverse engineering, unpacking, or vulnerability research with x64dbg or x32dbg via MCP. Provides expert knowledge on x64dbg/x32dbg MCP tools, Windows internals, assembly patterns, and reverse engineering methodology.4---56# x64dbg/x32dbg Reverse Engineering Skill78Expert knowledge base for reverse engineering with x64dbg or x32dbg through MCP.910## When to Use1112Activate this skill when:13- Analyzing binary executables on Windows14- Debugging applications with x64dbg/x32dbg15- Unpacking protected binaries16- Hunting for vulnerabilities17- Reverse engineering algorithms or protocols18- Monitoring API calls and system behavior19- Patching binary code2021## Available MCP Tools (79 total)2223### Debug Control (10 tools)24- `debug_get_state` - Check debugger state (paused/running/stopped)25- `debug_init` - Start a new debug session by loading an executable (params: `path?`, `arguments?`, `current_dir?`)26- `debug_run` - Continue execution27- `debug_pause` - Break execution28- `debug_step_into` - Single step into calls29- `debug_step_over` - Single step over calls30- `debug_step_out` - Execute until function returns31- `debug_run_to` - Run to specific address (param: `address`)32- `debug_restart` - Restart the debug session33- `debug_stop` - Stop debugging3435### Registers (4 tools)36- `register_get` - Read one register (param: `name`)37- `register_set` - Write register (params: `name`, `value`)38- `register_list` - List all registers (optional: `general_only`)39- `register_get_batch` - Read multiple registers (param: `names` array)4041### Memory (7 tools)42- `memory_read` - Read memory (params: `address`, `size`; optional: `encoding`)43- `memory_write` - Write memory (params: `address`, `data`; optional: `encoding`)44- `memory_search` - Search pattern (param: `pattern`; optional: `start`, `end`, `max_results`)45- `memory_get_info` - Region info (param: `address`)46- `memory_enumerate` - List all regions47- `memory_allocate` - Allocate memory (param: `size`)48- `memory_free` - Free memory (param: `address`)4950### Breakpoints (11 tools)51- `breakpoint_set` - Set breakpoint (param: `address`; optional: `type`, `enabled`)52- `breakpoint_delete` - Remove breakpoint (param: `address`)53- `breakpoint_enable` / `breakpoint_disable` / `breakpoint_toggle`54- `breakpoint_list` - List all breakpoints55- `breakpoint_get` - Get details (param: `address`)56- `breakpoint_delete_all` - Remove all57- `breakpoint_set_condition` - Set condition (params: `address`, `condition`)58- `breakpoint_set_log` - Set log message (params: `address`, `log_text`)59- `breakpoint_reset_hitcount` - Reset counter (param: `address`)6061### Disassembly (3 tools)62- `disassembly_at` - Disassemble at address (params: `address`, `count`)63- `disassembly_function` - Disassemble entire function (param: `address`)64- `disassembly_range` - Disassemble range (params: `start`, `end`)6566### Symbols (7 tools)67- `symbol_resolve` - Name to address (param: `symbol`)68- `symbol_from_address` - Address to name (param: `address`)69- `symbol_search` - Search symbols (param: `pattern`)70- `symbol_list` - List symbols (optional: `module`)71- `symbol_set_label` - Set label (params: `address`, `label`)72- `symbol_set_comment` / `symbol_get_comment`7374### Modules (5 tools)75- `module_list` - All loaded modules76- `module_get` - Module info (param: `module`)77- `module_get_main` - Main executable module78- `module_get_exports` - List module exports (param: `module`)79- `module_get_imports` - List module imports (param: `module`)8081### Threads (7 tools)82- `thread_list` - All threads83- `thread_get_current` - Current thread84- `thread_switch` - Switch thread (param: `thread_id`)85- `thread_get` - Thread info (param: `thread_id`)86- `thread_suspend` / `thread_resume` / `thread_get_count`8788### Stack (4 tools)89- `stack_get_trace` - Call stack trace90- `stack_read_frame` - Read stack frame (params: `address`, `size`)91- `stack_get_pointers` - RSP/RBP values on x64, ESP/EBP values on x8692- `stack_is_on_stack` - Check address (param: `address`)9394### Dump (5 tools)95- `dump_module` - Dump module to file with PE rebuild and optional OEP override96- `dump_memory_region` - Dump raw memory region97- `dump_analyze_module` - PE analysis with entropy and packer detection98- `dump_detect_oep` - Detect Original Entry Point via pattern analysis99- `dump_get_dumpable_regions` - List dumpable regions100101### Script (3 tools)102- `script_execute` - Run an x64dbg/x32dbg command (param: `command`)103- `script_execute_batch` - Run batch commands (param: `commands` array)104- `script_get_last_result` - Get last result105106### Context Snapshots (3 tools)107- `context_get_snapshot` - Full state capture108- `context_get_basic` - Quick register + state check109- `context_compare_snapshots` - Diff two snapshots110111### Expression Evaluation (1 tool)112- `eval_expression` - Evaluate x64dbg/x32dbg expressions (param: `expression`) — supports math, symbols, native registers, and architecture-neutral aliases such as `cip`/`csp` (for example, `[csp+8]`)113114### Cross-References (1 tool)115- `xref_get` - Get cross-references to an address (param: `address`)116117### Function Analysis (2 tools)118- `function_list` - List all recognized functions (optional: `module` filter)119- `function_get` - Get function boundaries at address (param: `address`)120121### Assembler (1 tool)122- `assembler_assemble` - Assemble instruction to bytes (params: `instruction`, `address`; optional: `write_to_memory`)123124### Bookmarks (3 tools)125- `bookmark_set` - Set bookmark (param: `address`)126- `bookmark_delete` - Delete bookmark (param: `address`)127- `bookmark_list` - List all bookmarks128129### Patch Management (2 tools)130- `patch_list` - List all applied byte-level patches131- `patch_restore` - Restore original bytes at address (param: `address`)132133## x64dbg/x32dbg Log Format Syntax134135When using `breakpoint_set_log`, format strings use these placeholders:136- `{REG}` - Register value in hex (e.g., `{RAX}`, `{RCX}`)137- `{REG:x}` - Explicit hex format138- `{[ADDR]}` - Dereference pointer at address139- `{[ADDR]:us}` - Read as Unicode string140- `{[ADDR]:as}` - Read as ASCII string141- `{[REG+OFFSET]}` - Register + offset dereference142143### x64 fastcall parameter logging144```145"FuncName: p1={RCX} p2={RDX} p3={R8} p4={R9} ret={[RSP]:x}"146```147148### x86 stdcall parameter logging149```150"FuncName: p1={[ESP+4]:x} p2={[ESP+8]:x} p3={[ESP+C]:x}"151```152153## Common Reverse Engineering Patterns154155### Identifying Calling Conventions156- **x64 fastcall** (Windows): RCX, RDX, R8, R9, then stack. Return in RAX.157- **x86 cdecl**: All params on stack, caller cleans. Return in EAX.158- **x86 stdcall** (WinAPI): All params on stack, callee cleans. Return in EAX.159- **x86 thiscall** (C++): ECX = this pointer, rest on stack.160161### Recognizing Crypto Constants162| Constant | Algorithm |163|----------|-----------|164| 0x67452301, 0xEFCDAB89 | MD5 / SHA-1 init |165| 0x6A09E667, 0xBB67AE85 | SHA-256 init |166| 0x61707865 ("expa") | ChaCha20 / Salsa20 |167| 0xEDB88320 | CRC32 (reflected) |168| 0x04C11DB7 | CRC32 (normal) |169| 0x9E3779B9 | TEA / XTEA golden ratio |170171### Windows Debug Heap Fill Patterns172| Pattern | Meaning |173|---------|---------|174| 0xCCCCCCCC | Uninitialized stack (MSVC debug) |175| 0xCDCDCDCD | Uninitialized heap (MSVC debug) |176| 0xDDDDDDDD | Freed heap memory |177| 0xFEEEFEEE | Freed heap (Windows debug heap) |178| 0xFDFDFDFD | Heap guard bytes (buffer boundaries) |179| 0xBAADF00D | LocalAlloc uninitialized |180| 0xDEADBEEF | Common debug marker |181182### Anti-Debug Detection Points183- `kernel32.IsDebuggerPresent` - Check PEB.BeingDebugged184- `ntdll.NtQueryInformationProcess` - ProcessDebugPort (0x7)185- `kernel32.CheckRemoteDebuggerPresent`186- PEB.NtGlobalFlag (0x70 = debugger attached)187- Timing checks: `rdtsc`, `QueryPerformanceCounter`, `GetTickCount`