補足1:IDAスクリプト言語IDC

1。IDAスクリプトが開き、使用します:

 

 

IDAスクリプト言語2:IDC(IDC、ローカルスクリプト言語)とPython

 

2。IDCは、言語を記述します

1。変数IDC:IDCは、明示的なタイプが存在しない、緩い言語です。3データ型整数(タイプ名長を使用して、IDA文書)、文字列、浮動小数点値を使用。アクションのほとんどは、整数と文字列のためです。

文字列は、IDCのネイティブデータ型として扱われるため。所望の記憶スペース文字列を追跡する必要はありません。

IDCは、ローカル変数をサポートしている、あなたは、任意の変数を使用する前に、変数を宣言します。

宣言したときに、ローカル変数キーワードautoの導入は、初期化することができます。

extern、または外部のキーワードのグローバル変数は、関数内で定義することができますが、初期値で全会一致のセッションのスペース、ライフサイクルとライフサイクルを割り当てられて初めて、宣言することはできません。

例:自動ADDR、REG、ヴァル。

 

2。注:Cスタイルのコメント/ ** /または//

 

3。「;」を使用し、セミコロンステートメントターミネータとCのような

 

4。IDC Cスタイルの配列(IDA5.6組み込ま断片)、ポインタ(IDA5.6がサポートし始めた)、または他の構造体と組合複雑なデータ構造、IDA5.6用いクラス

 

5。IDC式

C IDCは、三項演算子など、ほぼすべての算術演算子をサポートしていますが、ない複合代入演算子(例:+ = * = >> =など)。操作のすべての動作は、符号付き整数値は、プロセスは、右シフト演算記号(&0x7FFFFFFFで)を実行する必要があり、処理されます

文字列関数をコピーするために、IDCを使用する必要はありません(C言語のstrcpy、のstrdup)、文字列連結関数(C言語STRCAT)を必要としない、同様の指定されたスライスのアレイを使用して可変配列。

断片化の方法:[開始インデックス:インデックス終了】少なくとも1つのインデックス配列スライスIDC文字列と同様のプロセスを使用しました。

例:自動strは=」スライスする文字列」;

   カーS1、S2、S3、S4;

   S1 = STR [7:9] //へ

   S2 = strの[:6] //文字列

   S3 = strの[10:] //スライス

   S4 = STR [5] // G

 

6。IDC声明

すべてのIDC簡単な文のすべては、「;」終わり。IDCは、Cスタイルの複合文をサポートしていない唯一のスイッチです。forループを使用しているときIDCは、複合文がサポートされていません

例:自動I;

       用(i = 0; iが10 <; iは+ = 2){} //不正

       用(i = 0; iが10 <; I = I + 2){} //合法

IDCは厳密に範囲を新たに導入された変数に限定されるものではなく、これらの変数は} {外で参照することができます

例えば:

IF(1){

自動X;

X = 10。

}他{

       自動車と;

       Y = 3。

}

メッセージ(「X =%Dを\ n」、X)。

メッセージ( "Y =%d個の\ n"、Y);

Y、X = 10 = 0:結果は

だから、関数内で、変数は、他の機能にアクセスすることはできません宣言します。

 

7。IDC機能

IDCはIDCコマンド]ダイアログボックスがサポートされていない、別のプログラム(の.idcファイル)でユーザー定義関数をサポートしています。

機能のリストは、パラメータのみ「」カンマ区切りのリストを含むユーザー定義を導入するためのIDC静的キーワードの機能

機能の基本的な構造:

静的my_fun(X、Y、Z){

       自動A、B、C;

}

アドレスを転送する転送手段と、(使用&):方法の二種類を通過IDC関数パラメータ

例えば:

オートQ = 0、R = 1、S = 2。

my_func(Q、R、S)。

my_func(Q、およびR、S)。

関数の宣言は、戻り値と戻り値の型かどうかは明らかではない、あなたはどんな暗黙の戻り値がゼロである、戻り値のリターンを使用することができます。基準関数は、関数が結果の関数としての参照が返され、別の関数にパラメータとして渡すことができます。

例えば:

静的getFunc(){

       メッセージを返します。

}

静的たい(FUNC、アルギニン){

       関数(引数)。

}

{main()の静的

       オートF = getFunc()。

       F(「こんにちは世界\ nを」);

       (F、 "印刷を\ n")求めます。

}

 

       8。IDCオブジェクト

       IDCは、新しいクラスを作成し、そこから派生したすべてのクラスは、アクセス指定子を使用していないとき、単一継承をサポートするオブジェクトと呼ばれるルートクラスを定義して、すべてのクラスのメンバーが効果的に共同クラスで、クラス宣言は、クラスのメンバ関数の宣言が含まれています。あなたはデータメンバを作成する場合は、どちらかのデータメンバの割り当てに代入文を作成します。

       例えば:

       クラスでExampleClass {

              ExapmleClass(x、y)は{

                     this.a = xと;

                     this.b = Y。

              }

              〜でExampleClass(){}

              FOO(X){

                     this.a = this.a + X。

              }

       }

      

       {main()の静的

              でExampleClassの元;

              オートEX =でExampleClass(1,2)。

             

              ex.foo(10)。

              ex.z = "文字列"

       }

 

       9。IDCプログラム

       IDCは、基本的な構造をファイル:

       書式#include <idc.idc>

       {main()の静的

             

       }

       IDCは、以下のCと処理の指示を認識し

       #include <ファイル>

       #define <マクロ名> [オプション値]

       #ifdefの<名前>

       #else

       #endifの

       #undefの<名前>

 

       10。IDCのエラー処理

       エラーの二つのタイプ:

1。解析エラー:のみ最初のエラー時のIDCのレポートを解析します。

2。ランタイムエラー:珍しい、例外が(キャッチ/してみてください)取扱いはIDCをデバッグすることができない欠陥を補うことができます

      

       11。IDCのデータストレージ

IDCは、伝統的な意味でアレイをサポートしていない、IDCは、疎アレイ・オブジェクト配列(すなわちない予め割り当てアレイが、DAMAのための空間)

 

12。IDC准スクリプトのホットキー

フォーマット:

       書式#include <idc.idc>

       書式#include <my_amazing_script.idc>

       {main()の静的

              AddHotKey( "Z"、 "MyAmazingFunc")。

       }

 

おすすめ

転載: www.cnblogs.com/heixiang/p/10964135.html