基本地址
idc.ScreenEA()- 返回当前坐标地址
here()- 返回当前坐标地址,同上
MinEA()- 返回程序首地址
MaxEA()- 返回程序末尾地址
idc.SegName(ea)- 返回所在段,如:.text
idc.GetDisasm(ea)- 返回汇编,如:mov rdx, rdi
idc.GetMnem(ea)- 返回助记符,如:mov
idc.GetOpnd(ea, n)- 返回操作数,n表示第几个操作数,从0开始,如:idc.GetOpnd(ea, 0)返回rdx
idaapi.BADADDR- 用于比较地址是否无效,如:if idaapi.BADADDR == here(): print "Invalid address"
段地址
idautils.Segments()- 返回所有段
idc.SegName(seg)- 返回段名称
idc.SegStart(seg)- 返回段起始地址
idc.SegEnd(seg)- 返回段结束地址
idc.NextSeg(ea)- 返回下一个段起始地址,ea可以是当前段中任意地址
idc.SegByName(name)- 根据名称返回段起始地址
函数
idautils.Functions()- 返回所有函数
idc.GetFunctionName(func_a)- 返回函数名称
idaapi.get_func(ea)- 返回,其中有诸如startEA, endEA属性用于返回函数起始和结束地址
idc.NextFunction(ea)- 返回下一个函数起始地址
idc.PrevFunction(ea)- 返回上一个函数起始地址
idc.GetFunctionAttr(ea, attr) - 返回当前函数属性
idc.GetFunctionFlags(func_a)
返回的flags有以下几种:
FUNC_NORET- 函数无返回值
FUNC_FAR- 不常用
FUNC_USERFAR- 不常用
FUNC_LIB- 函数为标准库函数
FUNC_STATIC- 函数为static
FUNC_FRAME- 函数使用栈帧指针ebp,一般为push ebp; mov ebp, esp; sub esp, xxh
FUNC_BOTTOMBP- 函数使用栈指针,与FUNC_FRAME类似
指令
idautils.FuncItems(ea)- 返回当前函数所有指令,需要list(FuncItems(ea))转化为list
idc.NextHead(ea)- 返回下一条指令
idc.PrevHead(ea)- 返回上一条指令
idc.NextAddr(ea)- 返回下一地址
idc.PrevAddr(ea)- 返回上一地址
操作数
idc.GetOpType(ea, n)- 返回操作数类型
o_void- 不含有操作数的指令返回0,如:retn
o_reg- 寄存器,如:pop edi
o_mem- 内存引用,如:cmp ds:dword_A152B8, 0
o_phrase- 寄存器寻址,如:mov [edi+ecx], eax
o_displ- 偏移寻址,如:mov eax, [edi+18h]
o_imm- 直接数,如:add esp, 0Ch
o_far- x86和x86_64很少用到
o_near- x86和x86_64很少用到
idc.OpOff(ea, n, base)- 将操作数转换为offset,base为offset基地址
idc.GetOperandValue(ea, n)- 得到操作数的值
引用
idautils.CodeRefsTo(ea, flow)- 返回所有代码引用至,flow为是否包含正常指令流,0为不包含,1为包含
idautils.CodeRefsFrom(ea, flow)- 返回所有代码引用自,flow同上
idautils.Names()- 以元组(addr, name)形式返回所有name地址
idc.LocByName(name)- 返回name的地址
idautils.DataRefsTo(ea)- 返回所有数据引用至
idautils.DataRefsFrom(ea)- 返回所有数据引用自
idautils.XrefsTo(ea, flag=0)- 返回所有引用至,flag在代码引用时与flow一样
idautils.XrefsFrom(ea, flag=0)- 返回所有引用至,flag同上
查找
idc.FindBinary(ea, flag, searchstr, radix=16)- 查找二进制数据,默认以16进制形式查找,flag如下:
SEARCH_UP- 向上查找
SEARCH_DOWN- 向下查找
SEARCH_NEXT- 查找下一个
SEARCH_CASE- 指定示例
SEARCH_NOSHOW- 不显示查找过程
SEARCH_UNICODE- 查找unicode
SEARCH_IDENT
SEARCH_BRK
idc.FindText(ea, flag, y, x, searchstr)- 查找字符串,y表示在几行内查找,x表示字符串在行中位置,通常为0
idc.GetFlags(ea)- 返回当前地址标志,用于以下函数f参数:
idc.isCode(f)- 是否为代码
idc.isData(f)- 是否为数据
idc.isTail(f)- 是否为尾部
idc.isHead(f)- 是否为头部
idc.isUnknown(f)- 是否IDA不能识别
idc.FindCode(ea, flag)- 查找代码位置
idc.FindData(ea, flag)- 查找数据位置
idc.FindUnexplored(ea, flag)- 查找IDA无法识别为code或data的位置
idc.FindExplored(ea, flag)- 查找IDA识别为code或data的位置
idc.FindImmediate(ea, flag, value)- 查找直接数