安装idapython sdk
- 在idalib中根据readme按照要求配置
- 创建虚拟环境,pip install path/to/idalib/python
- 将idapro路径下的python复制到虚拟环境对应项目目录中
IdaPython函数积累
print_insn_mnem(ea)
: 返回指定地址(ea
)处指令的助记符generate_disasm_line(ea, flags)
: 返回指定地址(ea
)处指令的完整反汇编文本。print_operand(ea, n)
: 返回指定地址(ea
)处指令的第n
个操作数的名称(n 从 0 开始)。get_operand_value(ea, n)
:返回指定地址(ea
)处指令的第n
个操作数的如下内容@return: valueoperand is an immediate value => immediate valueoperand has a displacement => displacementoperand is a direct memory ref => memory addressoperand is a register => register numberoperand is a register phrase => phrase numberotherwise => -1
get_operand_type(ea, n)
: 返回指定地址ea
处第n
个操作数的类型
ida operand type
: https://cpp.docs.hex-rays.com/group__o__.html
get_qword(ea)
: 以小端序获得地址ea
的qword
ida_dbg.get_reg_val("RegName")
: 返回当先状态下对应reg的值
ida_dbg.wait_for_next_event(ida_dbg.WFNE_SUSP, 5000)
编写时遇到的小问题
- 这里是将地址0x555555A050传给了X14,而不是将qword_555555A050中的值传给X14应该使用
idc.get_operand_value(CurIp, 1)
而不是idc.get_qword(idc.get_operand_value(CurIp, 1))
- 如果不知道哪里出了问题,可以调试,之后暂停,看暂停在哪个函数里面,就代表这个函数调用的地方出错了.