Vector35 / Vector35/binaryninja-api

Don't display integer arguments as strings

Open
#4,692 2 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

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

Description

Version and Platform (required):

  • Binary Ninja Version: 3.6.4561-dev
  • OS: macOS
  • OS Version: 14.0
  • CPU Architecture: ARM64

Bug Description:
In the screenshot below, observe that - sometimes - we show the argument to a a function as a string despite the fact that it is typed as an integer. This is incredibly annoying as a user and the only way to fix it is to change the display type at every single call site.

Steps To Reproduce:

  1. Open the example binary
  2. Observe that the function being called many times around 0x0000e200 has a uint16_t as the first argument (which is not a pointer type!)
  3. Also observe that, in cases where a string is located at that address, it will display the string instead of the integer (which, again, is an identifier and not a pointer)
  4. Observe that the second argument is a char * and that it has the same behavior (which is the correct behavior in this circumstance)

Expected Behavior:
We should only ever look through the pointer and resolve the string if we've got a pointer. I understand it may be too limiting to restrict this to a char * (e.g. a uint16_t * may actually be a wide character string pointer).

Screenshots:

image

Additional Information:
Example binary available to Vector 35 employees, search for divisibly visible purgatory deacon.

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 reproducing the call display around 0x0000e200 in the example binary and trace the argument-display logic that decides when to resolve strings. Verify that integer arguments such as uint16_t remain numeric while pointer arguments such as char * retain string resolution.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
reverse-engineering
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.