(资料图)
IDApython的学习
我的IDA情况:IDA7.7,idapython3.8这个可以作为文件导入和命令行内输入,我一般习惯命令行这里要注意是python不是IDC
访问原数据
idc.get_wide_byte(ea) // 获取单字节,按整形解释idc.get_wide_word(ea) // 获取双字节,按整形解释idc.get_wide_dword(ea) // 获取四字节,按整形解释idc.get_qword(ea) // 获取八字节,按整形解释idc.GetFloat(ea) //获取四字节,按浮点解释idc.GetDouble(ea)//获取八字节,按浮点解释idc.get_bytes(ea,size) // 在ea获取size字节,按byte解释
idc.get_wide_byte(ea)
从ea获取一个字节,以整形的形式返回
idc.get_wide_word(ea)
从ea获取2个字节,以整形的形式返回,这里 为了方便大家看,我把整形转为16进制这里注意小端序
idc.get_wide_dword(ea)
从ea获取4个字节,以整形的形式返回
idc.get_qword(ea)
从ea获取8个字节,以整形的形式返回
idc.GetFloat(ea)
从ea获取4个字节,以浮点的形式返回
idc.GetDouble(ea)
从ea获取8个字节,以浮点的形式返回
idc.get_bytes(ea,size)
在ea获取size字节,按byte解释
数据打补丁
一般和获取原数据的api配合使用idc.patch_byte(ea, value)idc.patch_word(ea, value)idc.patch_dword(ea, value)idc.patch_qword(ea, value)
idc.patch_byte(ea, value)
下面就不一一演示了。
汇编获取
idc.GetDisasm(ea)//获取ea的汇编指令 比如 mov rbp, rspidc.print_insn_mnem(ea)//获取ea的汇编指令的名字,比如movidc.print_operand(ea,0)//获取操作数的文本表示形式指令(或数据)的线性地址N -操作数个数:0 -第一个操作数1 -第二个操作数返回:操作数的当前文本表示形式比如 rbp,同理idc.print_operand(ea,1)为rsp