improper "add negative -> subtract" transformation with floating point

Aperta
#2,807 1 commento 0 reazioni 1 assegnatario Vedi su GitHub

@rssor ci sta già lavorando.

Dal 12/1/2022.

Valutazione

Questa issue non è ancora stata valutata.

Descrizione

Component: Core Effort: Low Impact: Medium

Version and Platform (required):

  • Binary Ninja Version: 2.5.3140-dev (Build ID 532595b6)
  • OS: macOS
  • OS Version: 11.6

Steps To Reproduce:
Please provide all steps required to reproduce the behavior:

  1. Open this binary.

  2. Notice in HLIL:

00000000  uint64_t _start(float arg1 @ v0)

00000004      data_4000
0000001c      return zx.q(int.d(arg1 - 0x41666666))


00000020  uint64_t sub_20(float arg1 @ v0)

00000024      data_4000
0000003c      return zx.q(int.d(arg1 f+ 0x41666666))

Expected Behavior:
The functions are identical except for loading a different constant: one is "negative" 0x41666666, one is "positive" 0x41666666. In reality, both constants are used as 32-bit floats, not signed integers.

In the second function, Binary Ninja indicates that floating point addition is being used with f+ 0x41666666. But in the first function, Binary Ninja produces just - 0x41666666. This is wrong in two ways: it doesn't indicate that floating point is being used, and in any case arg1 f+ -0x41666666 (i.e. arg1 f+ 0xbe99999a, i.e. arg1 + -0.300000011921) is not equivalent to arg1 f- 0x41666666 (i.e. arg1 + 14.3999996185).

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

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.

Altre issue di Vector35/binaryninja-api

Tutte le issue di Vector35/binaryninja-api

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.