IDApython里面常用的函数
指令
import idc #对ea所在地址进行反汇编,得到汇编指令字符串 idc.GetDisasm(ea) #获取上一条指令地址,返回int类型 idc.prev_head(ea) #获取下一条指令地址,返回int类型 idc.next_head(ea) #返回操作指令 idc.print_insn_mnem(ea) #对ea所在地址的机器码进行反汇编,返回指令长度 idc.create_insn(ea) #获取操作数,n指定第几个操作码,从0开始,返回字符串 idc.print_operand(ea, n) #获取操作数的类型,返回值不同,那么代表的类型就不同 #o_void: 如果指令没有任何操作数,它将返回 0。 #o_reg: 如果操作数是寄存器,则返回这种类型,它的值为 1 #o_mem: 如果操作数是直接寻址的内存,那么返回这种类型,它的值是 2,这种类型对寻找 DATA的引用非常有帮助。 get_operand_type(ea,n) #获取操作数的值 idc.get_operand_value(ea,n)获取操作数的值
段操作
import idc import idautils import idaapi #获取所有段的名字,起始地址,结束地址 #seg是起始地址 for seg in idautils.Segments(): print(idc.get_segm_name(seg),idc.get_segm_start(seg),idc.get_segm_end(seg))
函数的操作
import idc #获取函数起始地址 start_ea = idc.get_func_attr(ea, 0) #获取函数的结束地址 end_ea = idc.get_func_attr(ea, 4) end_ea = idc.find_func_end(ea) ''' FUNCATTR_START = 0 # function start address FUNCATTR_END = 4 # function end address FUNCATTR_FLAGS = 8 # function flags FUNCATTR_FRAME = 10 # function frame id FUNCATTR_FRSIZE = 14 # size of local variables FUNCATTR_FRREGS = 18 # size of saved registers area FUNCATTR_ARGSIZE = 20 # number of bytes purged from the stack FUNCATTR_FPD = 24 # frame pointer delta FUNCATTR_COLOR = 28 # function color code FUNCATTR_OWNER = 10 # chunk owner (valid only for tail chunks) FUNCATTR_REFQTY = 14 # number of chunk parents (valid only for tail chunks) ''' #获取上一个函数起始地址 idc.get_prev_fchunk(ea) idc.get_prev_func(ea) #获取下一个函数起始地址 idc.get_next_fchunk(ea) idc.get_next_func(ea) #获取函数名 idc.get_func_name(ea)
数据的提取和修改
标签:get,ea,FUNCATTR,获取,地址,IDApython,idc From: https://www.cnblogs.com/biyifei/p/17153109.htmlimport idc #来获取某个地址开始的更多的字节。最后一个参 #数是可选的,用来指定是否正在调试内存。返回bytes类型 idc.get_bytes(ea, size, use_dbg = False) idc.get_wide_byte(ea) # 获取单字节 idc.get_wide_word(ea) # 获取一个字 idc.get_wide_dword(ea) # 获取双字 idc.get_qword(ea) # 获取四字 #注意下面两个参数必须是调试状态才行 idc.get_reg_value(string Register) # 获取寄存器的值 ,dbg必须处于运行状态 idc.set_reg_Value(long Value, string Register) # 通过寄存器名获得寄存器值。 patch_byte(ea, value) #修改一字 patch_word(ea, value) #修改二字 patch_dword(ea, value) #修改四字 patch_qword(ea, value) #修改八字