我有一长串从 IDA 函数名称 ( sub_??????
) 到已知函数原型的映射。原型是完整的,我的意思是它包含返回类型、代码中的名称以及参数类型和名称。
我的问题是,如何使用 IDAPython 脚本批量重命名和覆盖有关具有此原型信息的函数的所有数据?
我有一长串从 IDA 函数名称 ( sub_??????
) 到已知函数原型的映射。原型是完整的,我的意思是它包含返回类型、代码中的名称以及参数类型和名称。
我的问题是,如何使用 IDAPython 脚本批量重命名和覆盖有关具有此原型信息的函数的所有数据?
IDA 具有idc.SetType
接受函数起始偏移量和函数原型字符串并设置该函数的原型的方法,尽管它不会设置函数的名称。
该idc.SetType
函数实际上是一个围绕ida_typeinf.idc_parse_decl
and的便利函数ida_typeinf.apply_type
,通过idc
模块中定义的几个其他方法。如果你想同时设置函数名和原型,你可以使用idc.parse_decl
解析原型然后调用idc.apply_type
和idc.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)
自然地,您需要用函数的原型和地址替换PROTOTYPE
和FUNCTION_ADDRESS
,并在循环中实现它。我将把它留给读者作为练习。