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

オープン
#2,807 コメント 1 件 リアクション 0 件 担当者 1 名 GitHub で見る

@rssor がすでに取り組んでいます。

2022年1月12日 から。

評価

この issue はまだ評価されていません。

説明

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).

主要言語
C++
スター
1.3k
フォーク
298
平均マージ
5日 5時間
マージ済み PR(30日)
19

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

Vector35/binaryninja-api のほかの issue

Vector35/binaryninja-api の issue をすべて見る

似ている issue

C++ の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。