用途:通过 idasql 以 SQL 方式修改 IDA 数据库,适合为反编译结果和反汇编添加注释、重命名符号与局部变量、套用类型、组织书签,以及把反编译代码整理得更接近源码,便于与源码对照审查。
主要能力:
- 函数注释:使用 funcs.comment 写入普通函数注释,funcs.rpt_comment 写入可重复函数注释,并区分地址级注释表 comments。
- 伪代码注释:通过 pseudocode 表的 comment 与 comment_placement 编辑 Hex-Rays 反编译注释,支持 semi、block1、curly1 等放置位置;未识别的放置会默认为 semi。
- 清理孤立反编译注释:使用 pseudocode_v_orphan_comment_groups 与 pseudocode_orphan_comments,后者仅允许删除,写入非空会被拒绝。
- 局部变量与标签:通过 ctree_lvars 修改 name、type、comment,通过 ctree_labels 按 label_num 重命名。
- 类型与操作数表示:可更新 funcs.prototype、applied_types,以及 instructions 表的 operand*_format_spec,例如 enum:MY_ENUM、stroff:MY_STRUCT、clear、hex、char、offset、sizeof、forced、signed。
- 书签与文件夹:bookmarks 表支持增删改查,并可用 folder_path 将函数、名称、书签移动到 idasql/review/needs-types 等目录;用 UPDATE ... SET folder_path = NULL 移回根目录,DELETE FROM dirtree_folders 只删除空文件夹。
使用方式:先读后写。编辑前先查询目标行或函数,例如 SELECT * FROM funcs WHERE addr = 0x401000;,再检查 pseudocode 与 comments 的现有状态。更新时使用确定性键(如 func_addr + addr、idx、label_num),优先解析非花括号的唯一锚点。函数摘要使用 UPDATE funcs SET rpt_comment = ...;行内注释使用 UPDATE pseudocode SET comment_placement = 'semi', comment = ...。操作数表示通过 UPDATE instructions SET operand1_format_spec = ... 应用,无需 IDAPython。
适用场景:逆向分析、漏洞审查、反编译代码与源码对照、分阶段函数注释、组织待处理函数、清理过期注释。
限制:资料未提供收费、价格、平台支持等信息。伪代码注释不会调用 set_func_cmt(),真正的函数注释应使用 funcs.comment 或 funcs.rpt_comment。comment = NULL 会清除该地址下所有放置的注释。共享地址行不一定能独立写入。文件夹路径拒绝 ./..、重复分隔符、反斜杠以及重命名到已存在目标。类型声明创建、成员增删改、枚举值、parse_decls 等详见 types 技能;反编译器表结构详见 decompiler 技能。资料未说明具体支持版本或环境要求。