IDA Python 常用函数

官方文档

https://www.hex-rays.com/products/ida/support/idapython_docs/

读取

读取汇编信息

获取指定地址助记符

print_insn_mnem(ea)

获取上一条/下一条指令的地址

prev_head(ea)
next_head(ea)

超出当前函数边界后会跳至下一个函数

获取指定地址的第 n 个操作数

print_operand(ea,n)

如对于 0x40100 vpxor ymm3,ymm4,ymm5

1
2
3
4
>>>print_operand(0x40100,0)
ymm3
>>>print_operand(0x40100,1)
y4

获取指定地址的第 n 个立即数

get_printable_immvals(ea, n)

获取指定地址处的反汇编

GetDisasm(ea)

读取函数信息

获取一个地址范围内所有函数的地址

Functions(start_ea,end_ea)

返回一个 Python ·迭代器·对象

获取函数边界

get_func_attr(0x140008070,FUNCATTR_START)

get_func_attr(0x140008070,FUNCATTR_END)

获取当前地址的下一个/上一个函数

get_next_func(ea)

get_prev_func(ea)

读取数据

获取指定地址的字符串

get_strlit_contents(ea)

返回 Python bytes 类型

获取指定地址指定数量的bytes

get_bytes(ea,num)
返回 Python bytes 类型

获取指定地址的数据

1
2
3
4
5
6
7
ida_bytes.get_qword()
ida_bytes.get_dword()
ida_bytes.get_word()
ida_bytes.get_byte()
ida_bytes.get_64bit()
ida_bytes.get_32bit()
ida_bytes.get_16bit()

读取调试时寄存器的值

get_reg_val()

写入

修改数据

1
2
3
ida_bytes.patch_byte(ea,number)
ida_bytes.patch_word(ea,number)
ida_bytes.patch_dword(ea,number)

常用脚本片段

读取某地址范围内所有汇编助记符

1
2
3
4
5
ea=startAddress
while True:
if ea>endAddress:
print(opcode)
ea=next_head(ea)

列出某地址范围内的所有函数地址

1
2
for i in Functions(startAddress,endAddress):
print(i)

使用脚本控制调试,dump 数据

1
2
3
4
5
6
7
8
from idaapi import *

while True:
# print(get_reg_val('eax'))
# print(GetDisasm(GetEventEa()))
# print(get_dword(address))
continue_process()
wait_for_next_event(WFNE_SUSP,-1)