Debugging Modes
angr Management supports multiple debugging approaches:- Symbolic Execution
- Trace Replay
- Concrete Execution
Explore program paths symbolically
- Create symbolic states
- Set find/avoid addresses
- Explore multiple paths simultaneously
- Solve for inputs that reach targets
Breakpoints
Breakpoint Types
angr Management supports three types of breakpoints:Execution
Break when instruction is executed
Read
Break when memory is read
Write
Break when memory is written
Setting Breakpoints
- In Disassembly
- In Hex View
- Breakpoints View
- Via Console
Quick method:
- Click on instruction
- Press
F2 - Breakpoint toggles on/off
- Right-click instruction
- Select “Toggle Breakpoint”
- Choose breakpoint type
Managing Breakpoints
In the Breakpoints View (View → Breakpoints):Breakpoint Visualization
Breakpoints are shown throughout the interface:- Disassembly: Red dot next to instruction
- Hex View: Cyan highlight over address range
- Breakpoints View: Complete list with details
Execution Control
Control program execution with these commands:| Action | Shortcut | Description |
|---|---|---|
| Continue | F9 | Run until next breakpoint |
| Step Forward | F7 | Execute one instruction |
| Step Over | F8 | Step over function calls |
| Run to Cursor | Right-click → Run to Here | Execute until cursor position |
Execution control is available when a debugger is active (symbolic or trace-based).
Symbolic Execution
Creating Symbolic States
Configure State
- Starting address (default: current instruction)
- Input configuration (stdin, files, arguments)
- Environment variables
- Memory initialization
Find/Avoid Addresses
Guide symbolic execution to desired locations:- Find Addresses
- Avoid Addresses
Addresses you want to reach:
- Right-click target instruction
- Select “Set as Find Address”
- Green marker appears
- Symbolic execution prioritizes paths to this address
Symbolic Execution View
The Symbolic Execution view (View → Symbolic Execution) shows:Simulation Managers
Simulation Managers
- Active simulation managers
- State organization (active, found, avoided, etc.)
- State counts for each category
State Tree
State Tree
- Hierarchical view of states
- Parent-child relationships
- State divergence points
Execution Control
Execution Control
- Step states forward
- Explore paths
- Merge states
- Drop unwanted states
State Inspection
Registers View
View → Registers shows current CPU register values:Display
- All architecture registers
- Current values (hex and decimal)
- Changed values highlighted
- Symbolic expressions shown
Modification
- Double-click to edit
- Set concrete values
- View constraints on symbolic values
Stack View
View → Stack displays the current stack:- Stack pointer location
- Return addresses
- Local variables
- Stack frame boundaries
- Scroll to explore stack
- Click addresses to navigate
- Highlight stack frames
- Show ASCII representation
- Export stack contents
Memory Inspection
Use the Hex View (View → Hex) to inspect memory:- Enter address or symbol name
- View bytes and ASCII representation
- Edit values directly
- See highlighted regions for:
- Breakpoints
- Patches
- Modified data
Constraint Viewer
For symbolic states, view constraints:- Select state in States view
- Right-click → “View Constraints”
- See all path constraints
- Solve for satisfying values
Trace Debugging
Loading Traces
Trace Map View
View → Trace Map shows execution coverage:Visualization
- Heat map of executed code
- Color intensity shows execution frequency
- Identify hot paths and loops
Navigation
- Click to jump to code
- Zoom and pan
- Filter by execution count
Comparing Traces
Load multiple traces to compare:- Load first trace
- Load second trace
- Switch between traces in Traces view
- Use Trace Map to visualize differences
Debugging Workflows
Finding Crash Inputs
Analyzing Function Behavior
Debugging Patches
Advanced Debugging
Hooks
Intercept execution at specific addresses:Creating Hooks
Creating Hooks
- Right-click instruction → “Hook”
- Enter Python code to execute
- Access state via
statevariable - Return value controls execution flow
Simulation Manager Control
Advanced state management via console:State Hierarchy
View state relationships:- Open States view
- See parent-child relationships
- Understand where states diverged
- Track constraint additions
Debugging Tips
Performance
Speed up symbolic execution:
- Use concrete values where possible
- Set find/avoid addresses early
- Limit exploration depth
- Drop unreachable states
- Enable state merging
Accuracy
Improve results:
- Use accurate calling conventions
- Define function signatures
- Initialize memory correctly
- Model library functions
- Add constraints based on knowledge
Troubleshooting
Breakpoint Not Hit
Breakpoint Not Hit
Possible causes:
- Code never executes
- Wrong address
- Breakpoint disabled
- Verify code path in disassembly
- Check Breakpoints view for status
- Ensure debugger is active
Too Many States
Too Many States
Symbolic execution explodes:Solutions:
- Set find/avoid addresses
- Reduce symbolic input size
- Use concrete values for some inputs
- Enable aggressive state merging
- Limit exploration depth
Solver Timeout
Solver Timeout
Constraint solving takes too long:Solutions:
- Simplify constraints if possible
- Reduce symbolic input complexity
- Use concrete values where feasible
- Increase solver timeout in settings
Next Steps
Symbolic Execution
Deep dive into symbolic execution
Patching
Apply patches to fix bugs
Scripting
Automate debugging with scripts
Configuration
Configure debugging options