close
IDA Pro

逆コンパイラ:構成

逆コンパイラには構成ファイルがあります。IDAインストールの「cfg」サブディレクトリにインストールされます。 構成ファイルの名前は「hexrays.cfg」です。 シンプルなテキストファイルで、お好みに合わせて編集できます。現在、次のキーワードが定義されています。

OCTYPE_BGCOLOR

ローカルタイプの背景色。現在、この色は使用されていません。
デフォルト:逆アセンブリビューのデフォルトの背景

VARDECL_BGCOLOR

ローカル変数の背景色。これは、16進数の0xBBGGRRとして指定されます。ここで、BBは青の成分、GGは緑の成分、RRは赤の成分です。 色-1は、デフォルトの背景色(通常は白)を意味します。

デフォルト:逆アセンブリビューのデフォルトの背景

FUNCBODY_BGCOLOR

関数本体の背景色。VARDECL_BGCOLORと同じ方法で指定されます。
デフォルト:逆アセンブリビューのデフォルトの背景

MARK_BGCOLOR

逆コンパイル済みとしてマークされている場合の関数の背景色。VARDECL_BGCOLORと同じ方法で指定されます。
デフォルト:非常に薄い緑色

BLOCK_INDENT

ブロックインデントに使用するスペースの数。
デフォルト:2

COMMENT_INDENT

インデントされたコメントを開始する位置。
デフォルト:48

RIGHT_MARGIN

行の長さがこの値に近づくとすぐに、逆コンパイラはそれを分割しようとします。ただし、場合によっては回線が長くなることがあります。
デフォルト:120

MAX_NCOMMAS

式を比較的単純に保つために、デコンパイラは式内のコンマ演算子の数を制限します。それらが多すぎる場合、 逆コンパイラはgotoステートメントを追加し、式をブロックステートメントに置き換えます。
例:

  • if ( cond || (x=*p,y=func(),x+y>0) )
  •  body;

最終的には次のようになります。

  • if ( cond )
  •  goto LABEL;
  • x = *p;
  • y = func();
  • if ( x + y > 0 )
  • LABEL:
  •  body;

デフォルト:8

DEFAULT_RADIX

数値定数のデフォルトの基数を指定します。可能な値:0、10、16。ゼロは「符号付きの場合は10進数、 符号なしの場合は16進数」を意味します。
デフォルト:0

MAX_FUNCSIZE

コンパイル可能な最大関数サイズをKB単位で指定します。到達可能な基本ブロックのみが考慮されます。
デフォルト:64

HEXOPTIONS

さまざまな分析と表示オプションの組み合わせ:

・HO_JUMPOUT_HELPERS
有効にすると、逆コンパイラーはJUMPOUT()関数へのコールを生成することにより、関数外ジャンプを処理します。 無効にすると、そのような関数は逆コンパイルされません。
デフォルト:有効
・HO_DISPLAY_CASTS
有効にすると、逆コンパイラーは出力リストにキャスト演算子を表示します。
デフォルト:有効
・HO_HIDE_UNORDERED
有効にすると、逆コンパイラーは順序付けられていない浮動小数点比較を非表示にします。 このオプションをオフにすると、順序付けされていない比較がヘルパー関数の呼び出しとして表示されます。__UNORDERED __(a、b)
デフォルト:有効
・HO_SSE_INTRINSICS
有効にすると、逆コンパイラーはXMM / MMXレジスターを使用するSSE命令の組み込み関数を生成します。 このオプションがオフの場合、これらの命令はインラインアセンブリを使用して表示されます。
デフォルト:有効
・HO_IGNORE_OVERLAPS
有効にすると、ローカル変数の割り当てに失敗した場合でも、逆コンパイラーは出力を生成します。 この場合、出力が間違っている可能性があり、いくつかの重複した変数が含まれます。
デフォルト:有効
・HO_FAST_STRUCTURAL
有効にすると、高速構造解析が使用されます。ネストされたifステートメントの数は少なくなりますが、 不要なgotoが生成される場合があります。巨大な関数でははるかに高速です。
・HO_CONST_STRINGS
文字列リテラルが読み取り専用メモリ(.rodataセグメントなど)にある場合にのみ、文字列リテラルを出力します。 オフの場合、すべての文字列はリテラルとして出力されます。文字列変数のType declarationに「const」または「volatile」 を追加することで、逆コンパイラーの決定をオーバーライドできます。
・HO_SCMP_TO_BITOPS
ゼロの符号なし変数の符号付き比較をビットチェックに変換します。
変換前:(signed int)x < 0
変換後:(x & 0x80000000) != 0
・HO_UNMERGE_TAILS
ブランチテール最適化の逆効果:コードを複製することでgotoの数を減らします
・HO_KEEP_CURLIES
単一ステートメントブロックには中括弧を使用します。
・HO_DEL_ADDR_CMPS
アウェイアドレスの比較を最適化します。
  &a < &b
0または1に置き換えられます。この最適化は、再配置不可能なファイルに対してのみ機能します。
・HO_SHOW_CSTR_CASTS
文字列リテラルからchar / ucharへのポインタへのキャストを出力します。
例:
  (unsigned __int8 *)"Hello"
・HO_ESC_CLOSES_VIEW
Escキーを 押すと、擬似コードビューが閉じます。

警告

逆コンパイル後に表示される警告メッセージを指定します。詳細については、hexrays.cfgファイルを参照してください。
デフォルト:すべての警告がオンになっています

CMPFUNCS

「strcmp-like」と見なされる関数名の指定されたリスト。 それらの場合、逆コンパイラーはゼロとの比較を使用することを好みます。

  • strcmp(a、b)== 0

条件として関数名を比較する場合、アンダースコア、j_プレフィックス、および_NNサフィックスは無視されます。

MSVC制御フローガードの名前

・CFGUARD_CHECK
制御フローガードチェック機能の名称。この関数のコールは、擬似コードに含まれません。
デフォルト:「guard_check_icall_fptr」
・CFGUARD_DISPATCH
制御フローガードディスパッチ関数の名前。 この関数の各コールは、擬似コードを生成するときに「callrax」命令に置き換えられます。
デフォルト:「guard_dispatch_icall_fptr」