1

IDA Pro を使用して逆アセンブルされたバイナリのすべての関数名をコピーする方法が必要です。IDA から関数をエクスポートするオプションはありますか?

4

4 に答える 4

3

簡単な IDC スクリプトを記述して関数名を列挙し、それらをテキスト ファイルに出力できます。

使用する適切なコマンドについては、idc.idc を確認してください。

もう 1 つの方法は、関数ウィンドウを開いて Ctrl+C を押し、結果をファイルに貼り付けることです。

于 2012-04-06T21:00:34.497 に答える
0

関数名をダンプするために使用するコードは次のとおりです。0x40000 を最初の関数 EA 値に変更する必要があります。また、出力メッセージを変更することもできます。出力ウィンドウを右クリックしてクリアし、スクリプトを実行してから、[名前を付けて保存] を右クリックします。

#include <idc.idc>

static FuncDump(start)
{
    auto ea, str, count, ref;
    auto end;
    auto teststr;

    ea = start;

    while( ea != BADADDR )
    {
        str = GetFunctionName(ea);
        if( str != 0 )
        {
            end = FindFuncEnd(ea);

            count = 0;
            ref = RfirstB(ea);
            while(ref != BADADDR)
            {
                count = count + 1;
                ref = RnextB(ea, ref);
            }

            teststr = sprintf("sub_%X", ea);
            if( teststr != str )
            {
                Message("-s 0x%X=%s\n", ea, str );
            }
            //Message("%s, 0x%d, 0x%x, 0x%x, 0x%x, %d\n", str, count, ea, end, end-ea, end-ea   );
        }

        ea = NextFunction(ea);
    }
}

static main() 
{
    //Message("FuncDump: Start\n");

    FuncDump(0x40000);

    //Message("FuncDump: Done\n");
}
于 2013-02-20T09:56:48.317 に答える
0

Windows DLL の場合、同じアドレスに異なる序数を持つ 2 つ以上の関数が関連付けられている場合があります。

アドレスごとに 1 つの関数をスクリプト化することは、間違った想定です。

私にとってより簡単な方法は、[ファイル] -> [ファイルの生成] -> [ASM ファイルの作成] を使用せずにプログラムをエクスポートすることでした。

「grep」などのツールを使用して、文字列「Exported entry」のすべての出現箇所をリストします。

これは、IDA Pro 5 free でも機能します。

確かに、分析が完了するまでには時間がかかります。

于 2014-09-30T03:39:57.707 に答える