Vector35 / Vector35/binaryninja-api

Register plugins for operands

Open
#665 0 comments 5 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Component: Core Component: UI Effort: Low Impact: Medium UI: Linear
Dominant language
C++
Stars
1.3k
Forks
298
Avg merge
5d 5h
Merged PRs (30d)
19

Description

I think it would be nice to have a PluginCommand.register_for_operand that allowed a plugin to operate on a particular operand of an instruction. The plugin callback would be passed an InstructionTextToken object representing the operand that was right-clicked by the user (as well at least the address of the instruction it belongs to).

A very simple use case for this would be a plugin that would highlight all instructions that use a particular register. The user could right click a register, select the plugin, and then zoom out to see all instructions highlighted in a different color to indicate usage. This would be advantageous, because the token highlighting already provided by Binary Ninja can't be easily discerned when a function is zoomed out, but an entire line highlighted would be. Additionally, with the introduction of SSA, a plugin like this could apply highlighting to only instructions that use this particular version of the register, ignoring new definitions.

Obviously, the above example can be accomplished through the console, but that's not really the point, since it's just to demonstrate the usefulness of an operand-level plugin. With the current available callbacks, the user would have to select an instruction, invoke a plugin, and then plugin would then have to prompt the user to select the operand. This would streamline that process and make it a little more user friendly.

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.

Research direction

Start by reading PluginCommand and the existing instruction-level callbacks referenced in the issue. Trace how right-click context and InstructionTextToken data are exposed, then define what done means for registering a plugin on an operand and receiving that operand token plus its instruction address.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
reverse-engineering
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.