Claude-skill-registry idapython
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.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/idapython-majiayu000-claude-skill-registr" ~/.claude/skills/majiayu000-claude-skill-registry-idapython && rm -rf "$T"
manifest:
skills/data/idapython-majiayu000-claude-skill-registr/SKILL.mdsource content
IDAPython
Use modern
ida_* modules. Avoid legacy idc module.
Module Router
| Task | Module | Key Items |
|---|---|---|
| Bytes/memory | | , , , |
| Functions | | , , , |
| Names | | , , |
| Types | | , , |
| Decompiler | | , , , ctree visitor |
| Segments | | , , |
| Xrefs | | , , |
| Instructions | | , , |
| Stack frames | | , |
| Iteration | | , , , |
| UI/dialogs | | , , , |
| Database info | | , |
| Analysis | | , |
| Flow graphs | | , |
| Register tracking | | , |
Core Patterns
Iterate functions
for ea in idautils.Functions(): name = ida_funcs.get_func_name(ea) func = ida_funcs.get_func(ea)
Iterate instructions in function
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}")
Cross-references
for xref in idautils.XrefsTo(ea): print(f"{xref.frm:#x} -> {xref.to:#x} type={xref.type}")
Read/write bytes
data = ida_bytes.get_bytes(ea, size) ida_bytes.patch_bytes(ea, b"\x90\x90")
Names
name = ida_name.get_name(ea) ida_name.set_name(ea, "new_name", ida_name.SN_NOCHECK)
Decompile function
cfunc = ida_hexrays.decompile(ea) if cfunc: print(cfunc) # pseudocode for lvar in cfunc.lvars: print(f"{lvar.name}: {lvar.type()}")
Walk ctree (decompiled AST)
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)
Apply type
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)
Create structure
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")
Strings list
for s in idautils.Strings(): print(f"{s.ea:#x}: {str(s)}")
Wait for analysis
ida_auto.auto_wait() # Block until autoanalysis completes
Key Constants
| Constant | Value/Use |
|---|---|
| Invalid address sentinel |
| Skip name validation |
| Force type application |
, , , , | Operand types |
, , , | Data types |
, , , , | Code xref types |
, , | Data xref types |
Critical Rules
- NEVER convert hex/decimal manually — use
MCP toolint_convert - Wait for analysis: Call
before reading resultsida_auto.auto_wait() - Thread safety: IDA SDK calls must run on main thread (use
)@idasync - 64-bit addresses: Always assume
can be 64-bitea_t
Anti-Patterns
| Avoid | Do Instead |
|---|---|
functions | Use modules |
| Hardcoded addresses | Use names, patterns, or xrefs |
| Manual hex conversion | Use tool |
| Blocking main thread | Use for long ops |
| Guessing at types | Derive from disassembly/decompilation |
Detailed API Reference
For comprehensive documentation on any module, read
docs/<module>.md:
- High-use:
,ida_bytes
,ida_funcs
,ida_hexrays
,ida_typeinf
,ida_nameidautils - Medium-use:
,ida_segment
,ida_xref
,ida_ua
,ida_frameida_kernwin - Specialized:
(debugger),ida_dbg
(netnode storage),ida_nalt
(register tracking)ida_regfinder
Full RST sources from hex-rays.com available at
docs/<module>.rst.