Vector35 / Vector35/binaryninja-api
Inconsistent lifting of aarch64 str/stp/strb to high-level IR
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:
- Open a binary containing a function using str/stp/strb instructions to move characters into an array
- Notice that Binary Ninja is using
array[N] = Xand*(array + N) = Xseemingly 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
High-level IR vs. Medium-level IR
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- 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