1

我需要一种方法来复制使用 IDA Pro 反汇编的二进制文件的所有函数名称。是否有从 IDA 导出函数的选项?

4

4 回答 4

3

您可以编写一个快速 IDC 脚本来枚举函数名称并将它们发送到文本文件。

检查 idc.idc 以获取要使用的适当命令。

另一种方法是简单地打开函数窗口并按 Ctrl+C 并将结果粘贴到文件中

于 2012-04-06T21:00:34.497 回答
1

图形用户界面:

Ctrl+P > right menu > copy all


Py 脚本:

import idautils, ida_funcs

def get_func_names():
    names = []
    for ea in idautils.Functions():
        name = ida_funcs.get_func_name(ea)
        names.append(name)
    return names

print('\n'.join(get_func_names()))

// 用 ida7 测试

于 2020-12-08T04:58:40.670 回答
0

对于 Windows DLL,可以有两个或多个函数与具有不同序号的相同地址相关联。

为每个地址编写一个函数是一个错误的假设。

对我来说更简单的方法是导出不受文件影响的程序 -> 生成文件 -> 创建 ASM 文件

并使用“grep”等工具列出所有出现的字符串“Exported entry”。

这甚至适用于免费的 IDA Pro 5。

当然,在分析完成之前需要一些时间。

于 2014-09-30T03:39:57.707 回答
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 回答