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