在 IDA Pro 中知道函数原型的批量重命名函数

逆向工程 艾达 蟒蛇 职能
2021-06-30 21:05:58

我有一长串从 IDA 函数名称 ( sub_??????) 到已知函数原型的映射原型是完整的,我的意思是它包含返回类型、代码中的名称以及参数类型和名称。

我的问题是,如何使用 IDAPython 脚本批量重命名和覆盖有关具有此原型信息的函数的所有数据?

1个回答

IDA 具有idc.SetType接受函数起始偏移量和函数原型字符串并设置该函数的原型的方法,尽管它不会设置函数的名称。

idc.SetType函数实际上是一个围绕ida_typeinf.idc_parse_decland的便利函数ida_typeinf.apply_type,通过idc模块中定义的几个其他方法如果你想同时设置函数名和原型,你可以使用idc.parse_decl解析原型然后调用idc.apply_typeidc.set_name设置原型和名称。

阅读我链接到的代码idc.SetType确实使 API 变得清晰。

示例代码可能如下所示:

prototype_details = idc.parse_decl(PROTOTYPE, idc.PT_SILENT)
if prototype_details:
    idc.set_name(FUNCTION_ADDRESS, prototype_details[0])
    idc.apply_type(FUNCTION_ADDRESS, prototype_details)

自然地,您需要用函数的原型和地址替换PROTOTYPEFUNCTION_ADDRESS,并在循环中实现它。我将把它留给读者作为练习。