Dataflow navigation from the UI

Open
#1,974 0 comments 4 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
25/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Stale
Tech stack
cpp

Research direction

The issue names no files, tests, or entry points. Start by reviewing the existing UI variable highlighting and navigation behavior described in the report, then define how definition, next-use, previous-use, and token navigation should work. Done means the agreed dataflow navigation is available through the UI or keybinds.

Written by the indexing model from the issue text.

Description

Component: UI Effort: Medium Impact: Medium UI: Keybindings

It would be a great feature if we could navigate via keybinds/the UI along dataflow for a particular variable. Frequently, when REing something I want to audit the use sites of a variable, or see the source of a variable. Right now I do this by clicking to highlight the variable in the UI, then scrolling backwards. Binja has all the info I want, it just doesn't expose it nicely.

Examples:

  • Go to variable definition
  • Go to next use site
  • Go to previous use site

These would allow me to quickly bounce around for a variable inside a function and would be immensely useful. For a more complicated use case, consider the following:

var baz = whatever();
var bar = bread();
// ...
var foo = bar + baz;
// ...
quux(foo);

With the imaginary keybinds of:
d - jump to definition
u - jump to next use
U - jump to previous use
t - next line token

Let's say my cursor is at quux(foo) and I want to see where foo is defined. I could click foo to highlight it, then hit 'd' to go to the definition. From there, I could hit 't' to change the highlight from foo to bar, and 't' again to go from bar to baz. From either bar or baz I could now quickly cycle through their use sites with 'u', or jump directly to their definition with 'd'. This would replace and simplify a lot of the navigation I do inside a binary manually.

While this example is the way I imagine this working, I'm not at all wed to the specifics.

Dominant language
C++
Stars
1.3k
Forks
298
Avg merge
5d 5h
Merged PRs (30d)
19

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Vector35/binaryninja-api

All issues in Vector35/binaryninja-api

Similar issues

More C++ issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.