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")。
}