关于 ui-context
ui-context 是用于捕获和解读 IDA 当前界面状态的 idasql 技能,指导 Agent 说明视图、选区和代码锚点,并避免臆造缺失信息。
主要功能
- 01捕获当前界面状态
- 02识别视图类型与标题
- 03报告选区及预览内容
- 04提取代码地址锚点
- 05处理界面状态不可用的运行环境
适用场景
- 01说明 IDA 当前显示的内容
- 02描述当前选区
- 03从活动视图定位并解释函数
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ allthingsida/ idasql-skills --skill ui-context安装后在 Claude Code 中输入/ui-context确认已加载。
附带文件agents/openai.yaml
详细介绍
主要查询
使用此函数捕获当前 UI 状态:
SELECT get_ui_context_json();
每个用户问题捕获一次,然后在回答时重复使用该快照。 只有当用户要求刷新/重新检查,或开始提出新的 UI 相关问题时,才再次捕获。
触发模式
对于以下类型的提示,请使用此技能:
- “我现在看到的是什么?”
- “屏幕上有什么?”
- “选中了什么?”
- “看看我在做什么”
- 提及“这个”“这里”“当前”“选中”“那个”“之前”等内容
捕获策略
- 回答 UI 相关提示前,调用
get_ui_context_json()。 - 提取视图信息:控件类型/标题及自定义视图状态。
- 存在选区时,提取选区信息:起始/结束位置及预览文本行。
- 存在代码锚点时,提取代码锚点信息:地址、函数、段。
- 如果
has_address: false,请说明限制,不要编造代码上下文。
控件字段(focused_widget / main_viewer)
type_id(int):原始 IDAtwidget_type_t数字 ID。type_name(string):构建所用 SDK 中该控件的宏名称(例如"BWN_PSEUDOCODE"、"BWN_TILIST")。SDK 槽位 10 的名称因 IDA 版本而异(BWN_TILVIEW/BWN_TICSR/BWN_TITREE)。canonical_name(string):稳定且跨版本的名称。对于“Local Types”控件(槽位 10),该值始终为"BWN_LOCAL_TYPES";对于其他控件,该值与type_name相同。进行跨版本判断时优先使用此字段。category(string):高级别分组,取值为disassembly、decompiler、hex_view、type_view、chooser、debugger、navigation、output、script、auxiliary、unknown之一。is_address(bool):控件是否提供有意义的地址锚点(DISASM、HEXVIEW、PSEUDOCODE、MICROCODE 为 true)。is_custom_view(bool):是否为包含自定义行内容的查看器样式控件。is_chooser_like(bool):是否为基于行的列表/选择器控件,其行选中状态有意义。title(string):IDA 报告的控件标题。
main_viewer 包含相同的控件字段,但不含 is_chooser_like(主查看器始终是查看器,而不是选择器)。
时间引用规则
this/here/current/selected:针对当前问题捕获新快照。that/previous/earlier:在同一工作流程中重复使用最近的快照。- 如果用户说“refresh”,立即捕获新快照。
运行时可用性与回退
- 每种运行时都会注册
get_ui_context_json(),但只有 IDA GUI 插件会返回实时 UI 状态。 - 实时 GUI 封装中包含
available:true;idalib/CLI 存根中包含available:false/capture.source:"cli"(不是错误,只是没有 UI)。因此,在这两种情况下,available都是可靠的 GUI 与 CLI 判别依据——应以此字段为准。 - 收到 CLI 存根时,请明确说明这一点,并继续处理非 UI 查询(明确的地址/符号,或数据库方向的查询)。
binary 仅包含数据库元数据,不能替代 UI 上下文。
回复模板
读取 UI 上下文后,请使用以下固定格式:
What You Are Viewing:控件/视图概述。What Is Selected:选区范围和预览(或“没有活动选区”)。Code Context:可用时提供地址/函数/段;否则说明这是非地址视图。Limits:影响判断可信度的运行时限制或缺失字段。Suggested Next Query:一条具体的后续命令/查询。
示例
1)“我现在看到的是什么?”
SELECT get_ui_context_json();
使用上述模板字段回答。包含焦点控件的标题/类型,以及当前锚点地址(如有)。
2)“看看我在做什么”
SELECT get_ui_context_json();
先概述当前视图和选区,再提出与该上下文相关的下一步操作(例如,反编译当前函数)。
3)“现在选中了什么?”
SELECT get_ui_context_json();
优先提供选区起始/结束位置和预览文本。明确说明当前没有活动选区的情况。
4) “解释此函数”
- 捕获 UI 上下文。
- 如果存在函数/地址上下文,则切换到反编译器。
SELECT get_ui_context_json();
SELECT decompile(0x401000);
将 0x401000 替换为捕获的函数/地址锚点。
5) 后续提问:“那个函数怎么样?”
复用同一流程中最近一次的快照(除非用户要求,否则不要自动刷新),然后从存储的锚点继续分析。
6) 非地址视图(例如 Local Types 选择器)
SELECT get_ui_context_json();
如果 has_address: false,则报告选择器的选择详情,并说明此视图中没有代码地址锚点。
7) 插件 API 不可用(CLI/idalib)
如果无法运行 get_ui_context_json():
- 说明此运行时无法获取 UI 上下文
- 请用户提供明确的符号/地址,或使用非 UI 替代方案继续(例如使用
SELECT * FROM binary了解数据库概况)
防护规则
- 不要将
binary输出视为 UI 上下文。 - 缺少选择/地址字段时,不要编造这些字段。
- 除非用户要求刷新,否则同一回答中不要重复捕获。
评论
支持 Markdown