Loading...
Loading...
IDA Pro Python scripting for reverse engineering. Use when writing IDAPython scripts, analyzing binaries, working with IDA's API for disassembly, decompilation (Hex-Rays), type systems, cross-references, functions, segments, or any IDA database manipulation. Covers ida_* modules (50+), idautils iterators, and common patterns.
npx skill4agent add mrexodia/ida-pro-mcp idapythonida_*idc| Task | Module | Key Items |
|---|---|---|
| Bytes/memory | | |
| Functions | | |
| Names | | |
| Types | | |
| Decompiler | | |
| Segments | | |
| Xrefs | | |
| Instructions | | |
| Stack frames | | |
| Iteration | | |
| UI/dialogs | | |
| Database info | | |
| Analysis | | |
| Flow graphs | | |
| Register tracking | | |
for ea in idautils.Functions():
name = ida_funcs.get_func_name(ea)
func = ida_funcs.get_func(ea)for head in idautils.FuncItems(func_ea):
insn = ida_ua.insn_t()
if ida_ua.decode_insn(insn, head):
print(f"{head:#x}: {insn.itype}")for xref in idautils.XrefsTo(ea):
print(f"{xref.frm:#x} -> {xref.to:#x} type={xref.type}")data = ida_bytes.get_bytes(ea, size)
ida_bytes.patch_bytes(ea, b"\x90\x90")name = ida_name.get_name(ea)
ida_name.set_name(ea, "new_name", ida_name.SN_NOCHECK)cfunc = ida_hexrays.decompile(ea)
if cfunc:
print(cfunc) # pseudocode
for lvar in cfunc.lvars:
print(f"{lvar.name}: {lvar.type()}")class MyVisitor(ida_hexrays.ctree_visitor_t):
def visit_expr(self, e):
if e.op == ida_hexrays.cot_call:
print(f"Call at {e.ea:#x}")
return 0
cfunc = ida_hexrays.decompile(ea)
MyVisitor().apply_to(cfunc.body, None)tif = ida_typeinf.tinfo_t()
if ida_typeinf.parse_decl(tif, None, "int (*)(char *, int)", 0):
ida_typeinf.apply_tinfo(ea, tif, ida_typeinf.TINFO_DEFINITE)udt = ida_typeinf.udt_type_data_t()
m = ida_typeinf.udm_t()
m.name = "field1"
m.type = ida_typeinf.tinfo_t(ida_typeinf.BTF_INT32)
m.offset = 0
m.size = 4
udt.push_back(m)
tif = ida_typeinf.tinfo_t()
tif.create_udt(udt, ida_typeinf.BTF_STRUCT)
tif.set_named_type(ida_typeinf.get_idati(), "MyStruct")for s in idautils.Strings():
print(f"{s.ea:#x}: {str(s)}")ida_auto.auto_wait() # Block until autoanalysis completes| Constant | Value/Use |
|---|---|
| Invalid address sentinel |
| Skip name validation |
| Force type application |
| Operand types |
| Data types |
| Code xref types |
| Data xref types |
int_convertida_auto.auto_wait()@idasyncea_t| Avoid | Do Instead |
|---|---|
| Use |
| Hardcoded addresses | Use names, patterns, or xrefs |
| Manual hex conversion | Use |
| Blocking main thread | Use |
| Guessing at types | Derive from disassembly/decompilation |
docs/<module>.mdida_bytesida_funcsida_hexraysida_typeinfida_nameidautilsida_segmentida_xrefida_uaida_frameida_kernwinida_dbgida_naltida_regfinderdocs/<module>.rst