Microcode view
The Microcode view displays the decompiler's intermediate representation (microcode) at various maturity levels, allowing you to explore and adjust how the pseudocode is generated step-by-step.
Opening the Microcode view
You can open the Microcode view in two ways:
Press Ctrl + Shift + F8 while viewing a function
Navigate to View → Open subviews → Microcode
Maturity levels
During decompilation, the microcode progresses through different maturity levels. To navigate between maturity levels, you can use the context menu or the > and < keys to increase or decrease the currently displayed maturity level.
Microcode manipulation
The Microcode view allows you to modify the decompilation process by manipulating microcode instructions.
These modifications will propagate to higher maturity levels and ultimately affect the final pseudocode output.
Deleting instructions
To delete an instruction from the microcode, position the cursor on the instruction you want to delete and press the Delete key or select Delete instruction from the context menu.
After deleting an instruction, you can restore it by right-clicking it in the Microcode view and selecting Restore instruction from the context menu.
Specifying operand values
You can specify values for operands of microcode instructions to influence the decompilation process. To do this, right-click on the operand you want to specify and select Specify value... from the context menu.
This action inserts a new mov instruction that assigns the specified value to the selected operand. A dialog will open with the following fields:
Operand: Pre-filled with the current operand, if one exists. You can modify it if needed.
Value: The value you want to assign to the operand.
Insert after: Check this option to insert the new
movinstruction after the current instruction; uncheck it to insert before.
Analysis tools
The Microcode view provides several analysis and visualization tools accessible from the context menu.
Structural analysis
Reduces the control flow graph (CFG) into high-level control structures such as if, while, do, and switch statements. A graph of each intermediate reduction step is displayed, followed by a final tree showing the resulting control structure hierarchy. Edges that could not be structured are represented as goto regions.
Display chains
Computes and displays def-use (DU) and use-def (UD) chains for the current microcode. DU chains track where a value defined at one point is subsequently used; UD chains track where a value used at one point was previously defined.
Two chooser windows open:
du-ud chains: chains for register operands
stkvar du-ud: chains for stack variable operands
Display local types
Opens a chooser showing types encountered during decompilation.
The chooser has the following columns:
N
Row index
id
Address identifier for the type
source/deps
How the type was introduced (NONE, WEAK, FUNC, or DATA) and addresses of dependent functions
type
The type declaration
Display microcode graph
Shows the control flow graph, where each node is a basic block containing its microcode instructions.
Display ctree
Converts the microcode into a ctree (the decompiler's C-level AST) and displays it as a tree graph. The node nearest to the current cursor position is highlighted in green.
This action is only available when the microcode maturity level is MMAT_LVARS or higher, since the ctree requires local variable allocation to have been performed.
Display options
The Microcode view has several toggles that control what information is shown. These are available from the context menu and their settings are persisted across sessions.
Short view
Switches between a compact (short) and a detailed display of the microcode.
In detailed mode, each basic block includes additional information:
Block headers with use-def information, predecessor/successor lists, and block attributes
Instruction metadata such as flags, split sizes, and operand properties
Show number origins
Shows where numeric constants originate. For example, #3.8 becomes #[email protected], where @3B0A is the origin.
Show value numbers
Displays Global Value Numbering (GVN) identifiers on operands. GVN assigns the same number to operands that are known to hold the same computed value. For example, mov rax.8{5}, r8.8{5}, where {5} indicates both operands hold the same computed value.
Show addresses
Displays addresses at the beginning of each line, before the block and instruction numbers.
Last updated
Was this helpful?
