Vector35 / Vector35/binaryninja-api

Inconsistent lifting of aarch64 str/stp/strb to high-level IR

Aperta
#8,368 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
C++
Stelle
1.3k
Fork
298
Merge medio
5g 5h
PR unite (30g)
19

Descrizione

Version and Platform (required):

  • Binary Ninja Version: 5.4.10202-dev Personal, 1b846134
  • OS: fedora-asahi-remix
  • OS Version: 44
  • CPU Architecture: arm64

Bug Description:

Binary Ninja is using array[N] = X and *(array + N) = X seemingly at random when lifting str/stp/strb aarch64 instructions to high-level IR. This behaviour is even more puzzling when looking at the medium-level IR, as there doesn't seem to be any inconsistencies there.

Steps To Reproduce:

  1. Open a binary containing a function using str/stp/strb instructions to move characters into an array
  2. Notice that Binary Ninja is using array[N] = X and *(array + N) = X seemingly at random, instead of picking one.

Expected Behavior:

Binary Ninja should pick either array[N] = X or *(array + N) = X (with a personal preference for the former) and stick to it.

Screenshots:

High-level IR vs. Dissasembly

Image

High-level IR vs. Medium-level IR

Image

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Reproduce the inconsistent high-level IR output using a binary function with AArch64 str, stp, and strb instructions, then compare the high-level and medium-level IR as shown in the screenshots. Trace the lifting path for these instructions and verify that equivalent stores consistently use one representation. Done means the affected instructions produce consistent high-level IR while preserving the existing medium-level behavior.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
cpp
Ambito
compilers, reverse-engineering
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.