Vector35 / Vector35/binaryninja-api

_objc_msgSend rewrite parser cannot handle multiple functions sharing a selector name

Open
#5,595 5 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

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

Description

Lets say there are two class. Employee class and Student class. They are not related at all but they both have function called print.
current _objc_msgSend resolver doesn't account for that and sets everyone function to just one function.

You can see below its calling a function from Student when Employee is not even related to it
image

I think it should only set the address when you know for sure which object it is. maybe do sink -> init source analysis to know which class it is. and only change the call when it is likely correct.

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 locating the _objc_msgSend resolver and its rewrite parser, then reproduce the Employee/Student case described in the issue. Trace how selector names are mapped to functions when unrelated classes share a selector. Done means calls are rewritten only when the receiver's class can be identified with sufficient confidence, with the ambiguous case left unchanged.

Written by the indexing model from the issue text.

Assessment

Tech stack
objective-c
Domain
devtools, 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.