npx skills add https://github.com/mrexodia/ida-pro-mcp --skill idapython使用现代的 ida_* 模块。避免使用遗留的 idc 模块。
| 任务 | 模块 | 关键项 |
|---|---|---|
| 字节/内存 | ida_bytes | get_bytes, patch_bytes, get_flags, create_* |
| 函数 |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
ida_funcs |
func_t, get_func, add_func, get_func_name |
| 名称 | ida_name | set_name, get_name, demangle_name |
| 类型 | ida_typeinf | tinfo_t, apply_tinfo, parse_decl |
| 反编译器 | ida_hexrays | decompile, cfunc_t, lvar_t, ctree visitor |
| 段 | ida_segment | segment_t, getseg, add_segm |
| 交叉引用 | ida_xref | xrefblk_t, add_cref, add_dref |
| 指令 | ida_ua | insn_t, op_t, decode_insn |
| 栈帧 | ida_frame | get_frame, define_stkvar |
| 迭代 | idautils | Functions(), Heads(), XrefsTo(), Strings() |
| 用户界面/对话框 | ida_kernwin | msg, ask_*, jumpto, Choose |
| 数据库信息 | ida_ida | inf_get_*, inf_is_64bit() |
| 分析 | ida_auto | auto_wait, plan_and_wait |
| 流程图 | ida_gdl | FlowChart, BasicBlock |
| 寄存器追踪 | ida_regfinder | find_reg_value, reg_value_info_t |
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) # 伪代码
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() # 阻塞直到自动分析完成
| 常量 | 值/用途 |
|---|---|
BADADDR | 无效地址标记 |
ida_name.SN_NOCHECK | 跳过名称验证 |
ida_typeinf.TINFO_DEFINITE | 强制应用类型 |
o_reg, o_mem, o_imm, o_displ, o_near | 操作数类型 |
dt_byte, dt_word, dt_dword, dt_qword | 数据类型 |
fl_CF, fl_CN, fl_JF, fl_JN, fl_F | 代码交叉引用类型 |
dr_R, dr_W, dr_O | 数据交叉引用类型 |
int_convert MCP 工具ida_auto.auto_wait()@idasync)ea_t 可能是 64 位的| 避免 | 应改为 |
|---|---|
idc.* 函数 | 使用 ida_* 模块 |
| 硬编码地址 | 使用名称、模式或交叉引用 |
| 手动十六进制转换 | 使用 int_convert 工具 |
| 阻塞主线程 | 对长时间操作使用 execute_sync() |
| 猜测类型 | 从反汇编/反编译结果推导 |
关于任何模块的完整文档,请阅读 docs/<module>.md:
ida_bytes, ida_funcs, ida_hexrays, ida_typeinf, ida_name, idautilsida_segment, ida_xref, ida_ua, ida_frame, ida_kernwinida_dbg(调试器), ida_nalt(netnode 存储), ida_regfinder(寄存器追踪)来自 hex-rays.com 的完整 RST 源代码位于 docs/<module>.rst。
每周安装次数
77
代码仓库
GitHub 星标数
6.7K
首次出现
2026年1月29日
安全审计
安装于
opencode72
codex63
gemini-cli60
github-copilot59
amp55
kimi-cli55
Use modern ida_* modules. Avoid legacy idc module.
| Task | Module | Key Items |
|---|---|---|
| Bytes/memory | ida_bytes | get_bytes, patch_bytes, get_flags, create_* |
| Functions | ida_funcs | func_t, get_func, add_func, get_func_name |
| Names | ida_name | set_name, get_name, demangle_name |
| Types | ida_typeinf | tinfo_t, apply_tinfo, parse_decl |
| Decompiler | ida_hexrays | decompile, cfunc_t, lvar_t, ctree visitor |
| Segments | ida_segment | segment_t, getseg, add_segm |
| Xrefs | ida_xref | xrefblk_t, add_cref, add_dref |
| Instructions | ida_ua | insn_t, op_t, decode_insn |
| Stack frames | ida_frame | get_frame, define_stkvar |
| Iteration | idautils | Functions(), Heads(), XrefsTo(), Strings() |
| UI/dialogs | ida_kernwin | msg, ask_*, jumpto, Choose |
| Database info | ida_ida | inf_get_*, inf_is_64bit() |
| Analysis | ida_auto | auto_wait, plan_and_wait |
| Flow graphs | ida_gdl | FlowChart, BasicBlock |
| Register tracking | ida_regfinder | find_reg_value, reg_value_info_t |
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 |
|---|---|
BADADDR | Invalid address sentinel |
ida_name.SN_NOCHECK | Skip name validation |
ida_typeinf.TINFO_DEFINITE | Force type application |
o_reg, o_mem, o_imm, o_displ, o_near |
int_convert MCP toolida_auto.auto_wait() before reading results@idasync)ea_t can be 64-bit| Avoid | Do Instead |
|---|---|
idc.* functions | Use ida_* modules |
| Hardcoded addresses | Use names, patterns, or xrefs |
| Manual hex conversion | Use int_convert tool |
| Blocking main thread | Use execute_sync() for long ops |
| Guessing at types | Derive from disassembly/decompilation |
For comprehensive documentation on any module, read docs/<module>.md:
ida_bytes, ida_funcs, ida_hexrays, ida_typeinf, ida_name, idautilsida_segment, ida_xref, ida_ua, ida_frame, ida_kernwinFull RST sources from hex-rays.com available at docs/<module>.rst.
Weekly Installs
77
Repository
GitHub Stars
6.7K
First Seen
Jan 29, 2026
Security Audits
Gen Agent Trust HubFailSocketPassSnykPass
Installed on
opencode72
codex63
gemini-cli60
github-copilot59
amp55
kimi-cli55
通过 LiteLLM 代理让 Claude Code 对接 GitHub Copilot 运行 | 高级变通方案指南
46,900 周安装
社交媒体内容创作与管理技能:LinkedIn/X/Reddit/Discord 平台自动化工具
145 周安装
使用 bslib 构建现代化 Shiny 应用:Bootstrap 5 仪表盘与 UI 组件库
142 周安装
Python PDF处理全指南:合并拆分、文本表格提取、创建PDF文件
142 周安装
Mux视频平台开发指南:视频流、直播、播放器集成与AI工作流
83 周安装
Next.js App Router国际化方案:next-intl多语言路由配置指南
144 周安装
阿里云 AnalyticDB MySQL 数据库技能冒烟测试指南与自动化脚本
144 周安装
| Operand types |
dt_byte, dt_word, dt_dword, dt_qword | Data types |
fl_CF, fl_CN, fl_JF, fl_JN, fl_F | Code xref types |
dr_R, dr_W, dr_O | Data xref types |
ida_dbg (debugger), ida_nalt (netnode storage), ida_regfinder (register tracking)