Vector35 / Vector35/binaryninja-api

URI format for addressing analysis objects

Open
#8,308 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

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

Description

What is the feature you'd like to have?
I want a unified way to refer to analysis objects across the entire data model. This id format needs to uniquely identify a specific object, and ideally would be hierarchical so that we don't have to generate unique values for temporary / small objects.

Is your feature request related to a problem?

  • MCP could make good use of this, since it needs to refer to objects in a textual format
  • Merge resolution needs something like this for dependency resolution
  • Having the ability to navigate to or focus an object referred to by a string

Are any alternative solutions acceptable?
Previous solutions to these problems require writing a bunch of implementations for every analysis object class you can be bothered to write.

Additional Information:
The implementation of this has a couple of weird quirks:

  • Various analysis objects have confusing unique identifier characteristics (eg Symbols)
  • Various analysis objects aren't actually objects at all (eg Data Variables)
  • To know the path to an object, you need to know its parents recursively, so the function that returns the URI needs to know this hierarchy too.

Sketches on format design:
bv://functions/1234/variables/stack/-12/type
bv://comments/abcd

Maybe integrate into the existing URI scheme?
binaryninja:/tmp/foo.bndb#functions/1234/return_type

Analysis object hierarchy (v35 internal): Check the wiki page for Collaboration Conflict Resolution and the subsection on Analysis Data

Considered: have GUIDs generated for every object, so the lookup can be done in a flat namespace. This is likely not feasible since many analysis objects are small (eg Variables) and trying to shove a whole guid in there will be a massive memory regression.

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 with the Collaboration Conflict Resolution wiki page, especially the Analysis Data subsection, and review the existing URI scheme mentioned in the issue. Map the analysis-object hierarchy and identifier quirks before proposing a format. Done means a resolved design and implementation plan for uniquely addressing the listed object types, including temporary and non-object data.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
backend-api-design, reverse-engineering
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.