1
在使用IDAPython编写插件时,常使用的三个库为idaapi、idc和idautils,下面的这些API方法均来自这三个模块。Idaapi模块中导入了所有的以“ida_*.py”格式命名新模块,相当于所有新模块的整合。需要注意的是在IDAPython中有一个模块为idc_bc695,这是作为一个兼容之前版本(IDA 6.95)的脚本化插件而存在的模块,因为在IDA7.0版本发布时,其中的某些API函数名发生了变化。因此,对于同一个功能的实现,你可以使用不同的API方法来实现。
2
idc.MinEA():获取载入程序的最小的有效地址,兼容函数,等价于“get_inf_attr(INF_MIN_EA)”;
idc.MaxEA():获取载入的程序最大的有效地址,兼容函数,等价于“get_inf_attr(INF_MAX_EA)”;
ida_idaapi.get_inf_structure():获取当前打开的IDA的版本的信息,返回的是一个idainfo类型的结构体。
ida_ida.is_32bit()/is_64bit():判断IDA是否为32位的还是64位的,属于idainfo的一个方法属性。
idautils.Assemble(head, line):从head地址开始反汇编,寻找直到遇到line这条指令时停止,返回两个变量,一个表示是否成功,另外一个是最后这条line指令的字节表示,例如:ret就会是'\xc3'这一个字节来表示,有些指令可能由多个字节表示。
idc.GetMnem(ea):获取ea地址处的指令助记符,兼容函数,同“print_insn_mnem(ea)”功能相同。
idc.MakeCode(ea):从ea地址处开始尝试将数据转换为汇编代码,兼容函数,等价于“create_insn(ea)”。
ida_bytes.next_not_tail(ea):往下走一个指令,如果不是尾部,则返回下一条指令的起始地址。
idc.GetDisasm(ea):获取ea地址开始的一条汇编指令,等价于“generate_disasm_line(ea, 0)”。
idc.GetFlags(addr):获取addr地址处的一系列标志位,可用来判断属于code还是data,等价于ida_bytes.get_full_flags(ea),返回一个flags_t类型的实例。
idc.isCode(Flags):通过Flags判断是否是汇编代码,其中“Flags”为flags_t的一个实例,等价于“is_code(F)”。
idc.MakeUnkn(ea, flags):取消对ea地址处的定义,暂不清楚该地址是代码还是数据时可以使用,兼容函数,等价于“del_items(ea, flags)”。
idc.GetOpnd(addr, index):取addr地址处的指令的第index个操作数,从零开始,从左开始,依次为intel汇编语法中的目的操作数、源操作数,兼容函数,等价于“print_operand(ea, n)”。
ida_name.get_name_ea(min_ea, name):从min_ea地址开始,寻找名为name的有效地址,该name可以为函数名、label名。
ida_bytes.get_dword(addr):从addr地址处获取一个大小为dword的数据。
idc.MakeDword(addr):将addr开始的一个DWORD大小的数据定义为双字形式,举一反三,Q代表四字节数据,API形式一致,兼容函数,等价于create_data(ea, dataflag, size, tid)的不同参数形式。
idc.SegName(ea):得到ea地址所处的区段名,返回字符串,兼容函数,等价于“get_segm_name()”。
idc.MakeFunction(start, end):将start到end地址处定义为一个函数,相当于快捷键“P”,兼容函数,等价于“add_func(start, end)”。
idc.GetSpd(ea):获取ea地址处的栈指针SP的值,而在IDA中显示的值则是SP到BP基址针的差值,例如获取到的值为“-4”,在IDA中显示栈指针的情况时则为4,兼容函数,等价于“get_spd(ea)”。
idc.SetSpDiff(ea, delta):设置ea地址处的Sp指针与Bp指针的差值为“delta”,兼容函数,等价于“add_user_stkpnt(ea, delta)”。
ida_bytes.next_head(ea, maxea):在ea到maxea之间遍历下一条指令,返回下一条指令的地址,与“next_not_tail”功能相似。
ida_ua.ua_mnem(ea):返回ea地址处的指令助记符,等价于“print_insn_mnem(ea)”。
idc.MakeName(ea, label):给ea地址处一个标记label,兼容函数,等价于“set_name(ea, name, SN_CHECK)”。
idc.FindFuncEnd(ea): ea为函数的起始地址,找到该函数的结尾地址并返回,兼容函数,等价于“find_func_end(ea)”。
3
关于IDAPython API更多的介绍可以在Alexander Hanel的一书The Beginner’s Guide to IDAPython中查阅,也可以参照IDA安装目录下的python目录查阅详细的定义,当然也可以查阅其官方文档网站。