逆コンパイラ:構成
逆コンパイラには構成ファイルがあります。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」