This feature adds timestamp bookmarking capability to the Binary Ninja debugger, particularly useful for Time Travel Debugging (TTD) scenarios.
- Create bookmarks at current debugger position with custom descriptions
- Navigate to bookmarks with double-click (attempts TTD position navigation + address navigation)
- Persistent storage - bookmarks are saved with the binary view
- Time tracking - each bookmark stores when it was created
A new "Bookmarks" tab is added to the debugger sidebar with the following columns:
- Description: User-provided description of the bookmark
- TTD Position: Time Travel Debugging position (if available)
- Address: Memory address where bookmark was created
- Timestamp: When the bookmark was created
- Add Bookmark...: Create a new bookmark at current position
- Jump To Bookmark: Navigate to selected bookmark
- Remove Bookmark: Delete selected bookmark(s)
- Debugger > Add Bookmark (Ctrl+M): Quick bookmark creation from anywhere in the UI
-
Via Bookmarks Tab:
- Navigate to desired debugger position
- Open Debugger sidebar > Bookmarks tab
- Right-click > "Add Bookmark..." or use the Add button
- Enter a description
-
Via Global Action:
- Navigate to desired debugger position
- Press Ctrl+M or use Debugger menu > Add Bookmark
- Enter a description
- Double-click any bookmark in the Bookmarks tab
- Or right-click > "Jump To Bookmark"
The navigation system will:
- First attempt TTD position navigation (if TTD is available)
- Fall back to address navigation
- Provide feedback on success/failure
For Time Travel Debugging sessions, the bookmark system:
- Automatically detects TTD capability
- Attempts to capture current TTD position using
!ttcommand - On navigation, tries multiple TTD position commands (
!tt <position>,!position <position>) - Falls back gracefully to address navigation if TTD positioning fails
Bookmarks are stored in Binary Ninja metadata under the key "debugger.bookmarks" as an array of objects containing:
{
"description": "User description",
"ttdPosition": "12A:B4",
"address": 4194304,
"timestamp": "2024-01-01 12:00:00"
}The system attempts multiple TTD command formats for maximum compatibility:
!tt <position>(WinDbg TTD)!position <position>(alternate format)
- Graceful fallback when TTD commands fail
- User-friendly error messages
- Automatic refresh of bookmark list
- Input validation and sanitization
The bookmark feature follows existing debugger UI patterns:
- Uses same model/view/delegate pattern as breakpoints widget
- Integrates with existing action/menu system
- Follows Binary Ninja theming and font management
- Uses established metadata persistence patterns
Files added:
ui/bookmarkswidget.h- Header with BookmarkItem, model, delegate, and widget classesui/bookmarkswidget.cpp- Implementation with TTD integration- Modified
ui/debuggerwidget.h/cpp- Integration into main debugger UI - Modified
ui/ui.cpp- Global action registration