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)
数据的提取和修改
import 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) #修改八字