Есть ли способ экспортировать имена функций из IDA Pro? - PullRequest
1 голос
/ 14 января 2012

Мне нужен способ скопировать все имена функций двоичного файла, который был разобран с помощью IDA Pro. Есть ли возможность экспортировать функции из IDA?

Ответы [ 3 ]

3 голосов
/ 07 апреля 2012

Вы можете написать быстрый IDC-скрипт для перечисления имен функций и вывода их в текстовый файл.

Проверьте idc.idc для соответствующих команд для использования.

Другой способ - просто открыть окно «Функции», нажать Ctrl + C и вставить результат в файл

0 голосов
/ 30 сентября 2014

Для Windows DLL может быть две или более функций, связанных с одним и тем же адресом с разными порядковыми номерами.

Сценарий одной функции на адрес неверно.

Более простой способмне было экспортировать программу без изменений File -> Produce File -> Create ASM file

и перечислить все вхождения строки "Exported entry" с помощью инструментов типа "grep".

Это работает даже при бесплатной IDA Pro 5.

Конечно, пройдет некоторое время, прежде чем анализ закончится.

0 голосов
/ 20 февраля 2013

Вот код, который я использую для вывода имен своих функций, вам нужно изменить значение 0x40000 на значение первого советника функции. Также вы можете изменить выходное сообщение. Я щелкаю правой кнопкой мыши по окну вывода и очищаю его, затем запускаю скрипт, затем щелкаю правой кнопкой мыши save-as:

#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");
}
...