disassembly
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseTrigger Intents
触发场景
Use this skill when user asks for:
- Function/segment/instruction inspection
- Call-site or control-flow analysis from disassembly
- Operand formatting and low-level code structure
- Raw byte/instruction-level evidence
Route to:
- for AST/pseudocode semantics
decompiler - for relationship-heavy caller/callee workflows
xrefs - for patching/breakpoint actions
debugger
当用户询问以下内容时使用本技能:
- 函数/段/指令检查
- 基于反汇编的调用点或控制流分析
- 操作数格式与底层代码结构
- 原始字节/指令级证据
转向至:
- (反编译器)用于AST/伪代码语义分析
decompiler - (交叉引用)用于侧重调用者/被调用者关系的工作流
xrefs - (调试器)用于补丁/断点操作
debugger
Do This First (Warm-Start Sequence)
预启动流程(优先执行)
sql
-- 1) Orientation
SELECT * FROM welcome;
-- 2) Segment map
SELECT name, printf('0x%X', start_ea) AS start_ea, printf('0x%X', end_ea) AS end_ea, perm
FROM segments
ORDER BY start_ea;
-- 3) Largest functions (triage anchors)
SELECT name, printf('0x%X', address) AS addr, size
FROM funcs
ORDER BY size DESC
LIMIT 20;Interpretation guidance:
- Start from executable segments and largest/highly connected functions.
- Use constraints early when querying instruction-heavy surfaces.
func_addr
sql
-- 1) 环境定位
SELECT * FROM welcome;
-- 2) 段映射
SELECT name, printf('0x%X', start_ea) AS start_ea, printf('0x%X', end_ea) AS end_ea, perm
FROM segments
ORDER BY start_ea;
-- 3) 最大函数列表(优先级锚点)
SELECT name, printf('0x%X', address) AS addr, size
FROM funcs
ORDER BY size DESC
LIMIT 20;解读指南:
- 从可执行段和规模最大/关联度最高的函数入手。
- 在查询指令密集的内容时,尽早使用约束条件。
func_addr
Failure and Recovery
故障与恢复
- Slow queries on /
instructions:heads- Add or tight EA ranges.
WHERE func_addr = X
- Add
- Missing expected symbol names:
- Pivot to address-based workflows and enrich via updates later.
names
- Pivot to address-based workflows and enrich via
- Ambiguous control-flow behavior:
- Cross-check with and then escalate to
disasm_calls.decompiler
- Cross-check with
- 针对/
instructions的查询速度缓慢:heads- 添加或严格的EA范围限制。
WHERE func_addr = X
- 添加
- 缺失预期的符号名称:
- 切换到基于地址的工作流,后续通过更新补充信息。
names
- 切换到基于地址的工作流,后续通过
- 控制流行为不明确:
- 先通过交叉验证,再转向
disasm_calls分析。decompiler
- 先通过
Handoff Patterns
移交模式
- ->
disassemblyfor relation expansion.xrefs - ->
disassemblyfor semantic interpretation.decompiler - ->
disassemblyfor patch/breakpoint execution.debugger
- (反汇编)->
disassembly(交叉引用):用于关系扩展。xrefs - (反汇编)->
disassembly(反编译器):用于语义解读。decompiler - (反汇编)->
disassembly(调试器):用于补丁/断点执行。debugger
Entity Tables
实体表
funcs
funcs
All detected functions in the binary with prototype information.
| Column | Type | Description |
|---|---|---|
| INT | Function start address |
| TEXT | Function name |
| INT | Function size in bytes |
| INT | Function end address |
| INT | Function flags |
Prototype columns (populated when type info available):
| Column | Type | Description |
|---|---|---|
| TEXT | Return type string (e.g., "int", "void *") |
| INT | 1 if return type is pointer |
| INT | 1 if return type is exactly int |
| INT | 1 if return type is int-like (int, long, DWORD, BOOL) |
| INT | 1 if return type is void |
| INT | Number of function arguments |
| TEXT | Calling convention (cdecl, stdcall, fastcall, etc.) |
sql
-- 10 largest functions
SELECT name, size FROM funcs ORDER BY size DESC LIMIT 10;
-- Functions starting with "sub_" (auto-named, not analyzed)
SELECT name, printf('0x%X', address) as addr FROM funcs WHERE name LIKE 'sub_%';
-- Functions returning integers with 3+ arguments
SELECT name, return_type, arg_count FROM funcs
WHERE return_is_integral = 1 AND arg_count >= 3;Write operations:
sql
-- Create a function
INSERT INTO funcs (address) VALUES (0x401000);
-- Rename a function
UPDATE funcs SET name = 'my_func' WHERE address = 0x401000;
-- Delete a function
DELETE FROM funcs WHERE address = 0x401000;二进制文件中所有带原型信息的已检测函数。
| 列名 | 类型 | 描述 |
|---|---|---|
| INT | 函数起始地址 |
| TEXT | 函数名称 |
| INT | 函数字节大小 |
| INT | 函数结束地址 |
| INT | 函数标志位 |
原型列(当类型信息可用时填充):
| 列名 | 类型 | 描述 |
|---|---|---|
| TEXT | 返回类型字符串(例如:"int", "void *") |
| INT | 若返回类型为指针则为1 |
| INT | 若返回类型为int则为1 |
| INT | 若返回类型为类int类型(int、long、DWORD、BOOL)则为1 |
| INT | 若返回类型为void则为1 |
| INT | 函数参数数量 |
| TEXT | 调用约定(cdecl、stdcall、fastcall等) |
sql
-- 10个最大的函数
SELECT name, size FROM funcs ORDER BY size DESC LIMIT 10;
-- 以"sub_"开头的函数(自动命名,未分析)
SELECT name, printf('0x%X', address) as addr FROM funcs WHERE name LIKE 'sub_%';
-- 返回整数类型且参数数量≥3的函数
SELECT name, return_type, arg_count FROM funcs
WHERE return_is_integral = 1 AND arg_count >= 3;写入操作:
sql
-- 创建函数
INSERT INTO funcs (address) VALUES (0x401000);
-- 重命名函数
UPDATE funcs SET name = 'my_func' WHERE address = 0x401000;
-- 删除函数
DELETE FROM funcs WHERE address = 0x401000;segments
segments
Memory segments. Supports INSERT, UPDATE (, , ), and DELETE.
nameclassperm| Column | Type | RW | Description |
|---|---|---|---|
| INT | R | Segment start |
| INT | R | Segment end |
| TEXT | RW | Segment name (.text, .data, etc.) |
| TEXT | RW | Segment class (CODE, DATA) |
| INT | RW | Permissions (R=4, W=2, X=1) |
sql
-- Find executable segments
SELECT name, printf('0x%X', start_ea) as start FROM segments WHERE perm & 1 = 1;
-- Rename a segment
UPDATE segments SET name = '.mytext' WHERE start_ea = 0x401000;内存段。支持INSERT、UPDATE(、、字段)和DELETE操作。
nameclassperm| 列名 | 类型 | 读写权限 | 描述 |
|---|---|---|---|
| INT | R | 段起始地址 |
| INT | R | 段结束地址 |
| TEXT | RW | 段名称(.text、.data等) |
| TEXT | RW | 段类别(CODE、DATA) |
| INT | RW | 权限(R=4, W=2, X=1) |
sql
-- 查找可执行段
SELECT name, printf('0x%X', start_ea) as start FROM segments WHERE perm & 1 = 1;
-- 重命名段
UPDATE segments SET name = '.mytext' WHERE start_ea = 0x401000;names
names
All named locations (functions, labels, data). Supports INSERT, UPDATE, and DELETE.
| Column | Type | RW | Description |
|---|---|---|---|
| INT | R | Address |
| TEXT | RW | Name |
sql
-- Create/set a name
INSERT INTO names (address, name) VALUES (0x401000, 'my_symbol');
-- Rename
UPDATE names SET name = 'my_symbol_renamed' WHERE address = 0x401000;所有已命名的位置(函数、标签、数据)。支持INSERT、UPDATE和DELETE操作。
| 列名 | 类型 | 读写权限 | 描述 |
|---|---|---|---|
| INT | R | 地址 |
| TEXT | RW | 名称 |
sql
-- 创建/设置名称
INSERT INTO names (address, name) VALUES (0x401000, 'my_symbol');
-- 重命名
UPDATE names SET name = 'my_symbol_renamed' WHERE address = 0x401000;entries
entries
Entry points (exports, program entry, tls callbacks, etc.).
| Column | Type | Description |
|---|---|---|
| INT | Export ordinal |
| INT | Entry address |
| TEXT | Entry name |
入口点(导出函数、程序入口、TLS回调等)。
| 列名 | 类型 | 描述 |
|---|---|---|
| INT | 导出序号 |
| INT | 入口地址 |
| TEXT | 入口名称 |
Instruction Tables
指令表
instructions
instructions
instructionsdisasm_at(ea[, context])disasm_func()disasm_range()operand*_format_specWHERE func_addr = X| Column | Type | Description |
|---|---|---|
| INT | Instruction address |
| INT | Containing function |
| INT | Instruction type (architecture-specific) |
| TEXT | Instruction mnemonic |
| INT | Instruction size |
| TEXT | Operand text ( |
| TEXT | Full disassembly line |
| TEXT | Operand class: |
| TEXT | Current representation: |
| TEXT | Enum name or stroff path |
| TEXT (RW) | Apply/clear representation for a specific operand |
sql
-- Instruction profile of a function (FAST)
SELECT mnemonic, COUNT(*) as count
FROM instructions WHERE func_addr = 0x401330
GROUP BY mnemonic ORDER BY count DESC;
-- Find all call instructions in a function
SELECT address, disasm FROM instructions
WHERE func_addr = 0x401000 AND mnemonic = 'call';
-- Apply enum representation to operand 1
UPDATE instructions
SET operand1_format_spec = 'enum:MY_ENUM'
WHERE address = 0x401020;
-- Clear representation back to plain
UPDATE instructions
SET operand1_format_spec = 'clear'
WHERE address = 0x401020;instructionsdisasm_at(ea[, context])disasm_func()disasm_range()operand*_format_specWHERE func_addr = X| 列名 | 类型 | 描述 |
|---|---|---|
| INT | 指令地址 |
| INT | 所属函数 |
| INT | 指令类型(架构相关) |
| TEXT | 指令助记符 |
| INT | 指令大小 |
| TEXT | 操作文本( |
| TEXT | 完整反汇编行 |
| TEXT | 操作数类别: |
| TEXT | 当前表示方式: |
| TEXT | 枚举名称或stroff路径 |
| TEXT (RW) | 为特定操作数应用/清除表示方式 |
sql
-- 某函数的指令统计(快速查询)
SELECT mnemonic, COUNT(*) as count
FROM instructions WHERE func_addr = 0x401330
GROUP BY mnemonic ORDER BY count DESC;
-- 查找某函数中的所有调用指令
SELECT address, disasm FROM instructions
WHERE func_addr = 0x401000 AND mnemonic = 'call';
-- 为操作数1应用枚举表示
UPDATE instructions
SET operand1_format_spec = 'enum:MY_ENUM'
WHERE address = 0x401020;
-- 清除表示方式,恢复为默认格式
UPDATE instructions
SET operand1_format_spec = 'clear'
WHERE address = 0x401020;instruction_operands
instruction_operands
One row per decoded non-void operand. Use this table for operand type/value details and for joinable replacements of old operand/decode helper functions.
| Column | Type | Description |
|---|---|---|
| INT | Instruction address |
| INT | Containing function |
| INT | Operand index |
| TEXT | Operand text |
| INT | IDA operand type code |
| TEXT | Operand type name ( |
| INT | Operand dtype |
| INT | Register number when applicable |
| INT | Referenced address/displacement when applicable |
| INT | Raw operand value |
| INT | Best-effort scalar operand value |
sql
SELECT opnum, text, type_name, value
FROM instruction_operands
WHERE address = 0x401000
ORDER BY opnum;
SELECT i.address, i.itype, i.mnemonic, o.opnum, o.text, o.type_name, o.value
FROM instructions i
LEFT JOIN instruction_operands o
ON o.address = i.address AND o.func_addr = 0x401000
WHERE i.func_addr = 0x401000
ORDER BY i.address, o.opnum;Performance: decodes one instruction; uses O(function_size) iteration. Without one of these constraints, it scans the entire database.
WHERE address = XWHERE func_addr = X每个已解码的非空操作数对应一行。使用本表获取操作数类型/值详情,可替代旧的操作数/解码辅助函数进行关联查询。
| 列名 | 类型 | 描述 |
|---|---|---|
| INT | 指令地址 |
| INT | 所属函数 |
| INT | 操作数索引 |
| TEXT | 操作数文本 |
| INT | IDA操作数类型代码 |
| TEXT | 操作数类型名称( |
| INT | 操作数数据类型 |
| INT | 适用时的寄存器编号 |
| INT | 适用时的引用地址/位移 |
| INT | 原始操作数值 |
| INT | 最优标量操作数值 |
sql
SELECT opnum, text, type_name, value
FROM instruction_operands
WHERE address = 0x401000
ORDER BY opnum;
SELECT i.address, i.itype, i.mnemonic, o.opnum, o.text, o.type_name, o.value
FROM instructions i
LEFT JOIN instruction_operands o
ON o.address = i.address AND o.func_addr = 0x401000
WHERE i.func_addr = 0x401000
ORDER BY i.address, o.opnum;性能说明: 会解码单条指令;会遍历O(function_size)量级的内容。若不使用任一约束,会扫描整个数据库。
WHERE address = XWHERE func_addr = Xdisasm_calls
disasm_calls
All call instructions with resolved targets.
| Column | Type | Description |
|---|---|---|
| INT | Function containing the call |
| INT | Call instruction address |
| INT | Target address (0 if unknown) |
| TEXT | Target name |
sql
-- Functions that call malloc
SELECT DISTINCT (SELECT name FROM funcs WHERE func_addr >= address AND func_addr < end_ea LIMIT 1) as caller
FROM disasm_calls WHERE callee_name LIKE '%malloc%';所有已解析目标地址的调用指令。
| 列名 | 类型 | 描述 |
|---|---|---|
| INT | 包含该调用的函数 |
| INT | 调用指令地址 |
| INT | 目标地址(未知则为0) |
| TEXT | 目标名称 |
sql
-- 调用malloc的函数
SELECT DISTINCT (SELECT name FROM funcs WHERE func_addr >= address AND func_addr < end_ea LIMIT 1) as caller
FROM disasm_calls WHERE callee_name LIKE '%malloc%';blocks
blocks
Basic blocks within functions. Use constraint for performance.
func_ea| Column | Type | Description |
|---|---|---|
| INT | Containing function |
| INT | Block start |
| INT | Block end |
| INT | Block size |
sql
-- Blocks in a specific function (FAST - uses constraint pushdown)
SELECT * FROM blocks WHERE func_ea = 0x401000;
-- Functions with most basic blocks
SELECT (SELECT name FROM funcs WHERE func_ea >= address AND func_ea < end_ea LIMIT 1) as name, COUNT(*) as blocks
FROM blocks GROUP BY func_ea ORDER BY blocks DESC LIMIT 10;函数内的基本块。为保证性能,请使用约束条件。
func_ea| 列名 | 类型 | 描述 |
|---|---|---|
| INT | 所属函数 |
| INT | 块起始地址 |
| INT | 块结束地址 |
| INT | 块大小 |
sql
-- 特定函数内的块(快速查询 - 使用约束下推)
SELECT * FROM blocks WHERE func_ea = 0x401000;
-- 包含最多基本块的函数
SELECT (SELECT name FROM funcs WHERE func_ea >= address AND func_ea < end_ea LIMIT 1) as name, COUNT(*) as blocks
FROM blocks GROUP BY func_ea ORDER BY blocks DESC LIMIT 10;cfg_edges
cfg_edges
Control flow graph edges between basic blocks. Always use (filter_eq pushdown, O(blocks in function)).
WHERE func_ea = X| Column | Type | Description |
|---|---|---|
| INT | Containing function |
| INT | Source block address |
| INT | Target block address |
| TEXT | |
sql
-- Get CFG structure
SELECT * FROM cfg_edges WHERE func_ea = 0x401000;
-- Find branch points (conditional blocks)
SELECT from_block, COUNT(*) as succ_count
FROM cfg_edges WHERE func_ea = 0x401000
GROUP BY from_block HAVING succ_count > 1;
-- Find merge points (blocks with multiple predecessors)
SELECT to_block, COUNT(*) as pred_count
FROM cfg_edges WHERE func_ea = 0x401000
GROUP BY to_block HAVING pred_count > 1;
-- Function complexity ranking: combine CFG, loops, and call metrics
SELECT f.name, f.size,
(SELECT COUNT(*)
FROM (
SELECT ce.from_block
FROM cfg_edges ce
WHERE ce.func_ea = f.address
GROUP BY ce.from_block
HAVING COUNT(*) > 1
) branch_blocks) as branch_sites,
(SELECT COUNT(*) FROM disasm_loops dl WHERE dl.func_addr = f.address) as loops,
(SELECT COUNT(*) FROM disasm_calls dc WHERE dc.func_addr = f.address) as calls_made
FROM funcs f
WHERE f.size > 32
ORDER BY branch_sites DESC
LIMIT 20;基本块之间的控制流图(CFG)边。务必使用(等值过滤下推,复杂度为O(函数内的块数量))。
WHERE func_ea = X| 列名 | 类型 | 描述 |
|---|---|---|
| INT | 所属函数 |
| INT | 源块地址 |
| INT | 目标块地址 |
| TEXT | |
sql
-- 获取CFG结构
SELECT * FROM cfg_edges WHERE func_ea = 0x401000;
-- 查找分支点(条件块)
SELECT from_block, COUNT(*) as succ_count
FROM cfg_edges WHERE func_ea = 0x401000
GROUP BY from_block HAVING succ_count > 1;
-- 查找合并点(有多个前驱的块)
SELECT to_block, COUNT(*) as pred_count
FROM cfg_edges WHERE func_ea = 0x401000
GROUP BY to_block HAVING pred_count > 1;
-- 函数复杂度排名:结合CFG、循环和调用指标
SELECT f.name, f.size,
(SELECT COUNT(*)
FROM (
SELECT ce.from_block
FROM cfg_edges ce
WHERE ce.func_ea = f.address
GROUP BY ce.from_block
HAVING COUNT(*) > 1
) branch_blocks) as branch_sites,
(SELECT COUNT(*) FROM disasm_loops dl WHERE dl.func_addr = f.address) as loops,
(SELECT COUNT(*) FROM disasm_calls dc WHERE dc.func_addr = f.address) as calls_made
FROM funcs f
WHERE f.size > 32
ORDER BY branch_sites DESC
LIMIT 20;function_chunks
function_chunks
Cached table with one row per function chunk. Aggregate by when you
need function-level span or density metrics.
func_addr| Column | Type | Description |
|---|---|---|
| INT | Function address |
| INT | Chunk start address |
| INT | Chunk end address |
| INT | Number of blocks in chunk |
| INT | Total size of chunk |
sql
SELECT * FROM function_chunks WHERE func_addr = 0x401000;缓存表,每个函数块对应一行。当需要函数级跨度或密度指标时,按聚合。
func_addr| 列名 | 类型 | 描述 |
|---|---|---|
| INT | 函数地址 |
| INT | 块起始地址 |
| INT | 块结束地址 |
| INT | 块内的基本块数量 |
| INT | 块的总大小 |
sql
SELECT * FROM function_chunks WHERE func_addr = 0x401000;SQL Functions -- Disassembly
SQL函数 -- 反汇编
| Function | Description |
|---|---|
| Canonical listing line for containing head (works for code/data) |
| Canonical listing line with +/- |
| Single disassembly line at address |
| Next N instructions from address (count-based) |
| All disassembly lines in address range [start, end) |
| Full disassembly of function containing address |
| Create instruction at address (returns 1/0) |
| Create instructions in range, returns created count |
| 函数 | 描述 |
|---|---|
| 对应代码头的标准列表行(适用于代码/数据) |
| 包含前后 |
| 指定地址处的单条反汇编行 |
| 从指定地址开始的后续N条指令(按数量统计) |
| 地址范围[start, end)内的所有反汇编行 |
| 指定地址所属函数的完整反汇编内容 |
| 在指定地址创建指令(返回1/0表示成功/失败) |
| 在指定范围创建指令,返回创建的数量 |
Disassembly Examples
反汇编示例
sql
-- Canonical single-EA disassembly (safe for code or data)
SELECT disasm_at(0x401000);
-- Canonical context window (+/- 2 heads)
SELECT disasm_at(0x401000, 2);
-- Full function disassembly (resolves boundaries via get_func)
SELECT disasm_func(address) FROM funcs WHERE name = '_main';
-- Disassemble a specific address range
SELECT disasm_range(0x401000, 0x401100);
-- Sliding window: next 5 instructions from an address
SELECT disasm(0x401000, 5);sql
-- 指定EA的标准反汇编内容(适用于代码或数据)
SELECT disasm_at(0x401000);
-- 包含上下文的标准列表(前后2个代码头)
SELECT disasm_at(0x401000, 2);
-- 完整函数反汇编(通过get_func解析边界)
SELECT disasm_func(address) FROM funcs WHERE name = '_main';
-- 反汇编指定地址范围
SELECT disasm_range(0x401000, 0x401100);
-- 滑动窗口:从指定地址开始的后续5条指令
SELECT disasm(0x401000, 5);SQL Functions -- Names & Functions
SQL函数 -- 名称与函数
Use table lookups for address and containing-function metadata. Resolve symbol names to integer EAs before using these patterns.
| Pattern | Description |
|---|---|
| Name at address |
| Function containing address |
| Start of containing function |
| End of containing function |
Function count and index lookup are table-driven:
sql
SELECT COUNT(*) AS function_count FROM funcs;
SELECT address FROM funcs WHERE rowid = 0;使用表查询获取地址和所属函数的元数据。在使用以下模式前,先将符号名称解析为整数EA。
| 模式 | 描述 |
|---|---|
| 指定地址处的名称 |
| 指定地址所属的函数 |
| 指定地址所属函数的起始地址 |
| 指定地址所属函数的结束地址 |
函数计数和索引查询基于表驱动:
sql
SELECT COUNT(*) AS function_count FROM funcs;
SELECT address FROM funcs WHERE rowid = 0;SQL Functions -- Navigation
SQL函数 -- 导航
Use ordering for defined-item navigation and SQLite formatting functions for display strings. Address equality/range filters are optimized; or is consumed for next/previous-item lookups.
headsORDER BY addressORDER BY address DESCsql
SELECT address
FROM heads
WHERE address > 0x401000
ORDER BY address
LIMIT 1;
SELECT address
FROM heads
WHERE address < 0x401000
ORDER BY address DESC
LIMIT 1;
SELECT printf('0x%llx', address) AS address_hex
FROM heads
LIMIT 10;Segment lookup is table-driven:
sql
SELECT name
FROM segments
WHERE 0x401000 >= start_ea
AND 0x401000 < end_ea
LIMIT 1;使用排序进行已定义项导航,使用SQLite格式化函数生成显示字符串。地址等值/范围查询已优化;或可用于查找下一个/上一个条目。
headsORDER BY addressORDER BY address DESCsql
SELECT address
FROM heads
WHERE address > 0x401000
ORDER BY address
LIMIT 1;
SELECT address
FROM heads
WHERE address < 0x401000
ORDER BY address DESC
LIMIT 1;
SELECT printf('0x%llx', address) AS address_hex
FROM heads
LIMIT 10;段查询基于表驱动:
sql
SELECT name
FROM segments
WHERE 0x401000 >= start_ea
AND 0x401000 < end_ea
LIMIT 1;SQL Functions -- Item Analysis
SQL函数 -- 条目分析
Use for item classification, size, and raw flags:
headssql
SELECT address, size, type, flags, disasm
FROM heads
WHERE address = 0x401000;使用进行条目分类、大小和原始标志位查询:
headssql
SELECT address, size, type, flags, disasm
FROM heads
WHERE address = 0x401000;SQL Functions -- Instruction Details
SQL函数 -- 指令详情
Use and for decoded instruction facts:
instructionsinstruction_operandssql
SELECT address, itype, mnemonic
FROM instructions
WHERE func_addr = 0x401000
LIMIT 10;
SELECT opnum, text, type_code, type_name, value
FROM instruction_operands
WHERE address = 0x401000
ORDER BY opnum;
SELECT i.address, i.itype, i.mnemonic, i.size, o.opnum, o.text, o.type_name, o.value
FROM instructions i
LEFT JOIN instruction_operands o
ON o.address = i.address AND o.address = 0x401000
WHERE i.address = 0x401000
ORDER BY o.opnum;使用和获取已解码指令的详细信息:
instructionsinstruction_operandssql
SELECT address, itype, mnemonic
FROM instructions
WHERE func_addr = 0x401000
LIMIT 10;
SELECT opnum, text, type_code, type_name, value
FROM instruction_operands
WHERE address = 0x401000
ORDER BY opnum;
SELECT i.address, i.itype, i.mnemonic, i.size, o.opnum, o.text, o.type_name, o.value
FROM instructions i
LEFT JOIN instruction_operands o
ON o.address = i.address AND o.address = 0x401000
WHERE i.address = 0x401000
ORDER BY o.opnum;SQL Functions -- File Generation
SQL函数 -- 文件生成
| Function | Description |
|---|---|
| Generate full-database listing output (LST) |
| 函数 | 描述 |
|---|---|
| 生成全数据库列表输出(LST格式) |
SQL Functions -- Graph Generation
SQL函数 -- 图生成
| Function | Description |
|---|---|
| Generate CFG as DOT graph string |
| Write CFG DOT to file |
| Generate database schema as DOT |
sql
-- Get CFG for a function as DOT format
SELECT gen_cfg_dot(0x401000);| 函数 | 描述 |
|---|---|
| 生成CFG的DOT图字符串 |
| 将CFG的DOT图写入文件 |
| 生成数据库架构的DOT图 |
sql
-- 获取某函数的CFG(DOT格式)
SELECT gen_cfg_dot(0x401000);Performance Rules
性能规则
| Table | Architecture | Key Constraint | Notes |
|---|---|---|---|
| Index-Based | none needed | O(1) per row via |
| Iterator | | Function-item iterator (fast) vs full code-head scan (slow) |
| Iterator | | Constraint pushdown: iterates blocks of one function |
| Iterator | | filter_eq pushdown: O(blocks in function) |
| Generator | | Lazy streaming, respects LIMIT |
| Generator | | Consumes |
| Iterator | | Address lookup decodes one instruction; function lookup iterates one function |
| Index-Based | none needed | Small table, always fast |
| Iterator | none needed | Iterates IDA's name list |
Key rules:
- is always fast -- no constraint needed.
funcs - without
instructionsscans every code head -- usefunc_addrfor per-function queries.func_addr - without
blocksiterates all functions' flowcharts -- always constrain.func_ea - is often large. Use
headsfor item facts and address range plusaddress = Xfor navigation.ORDER BY address [DESC] LIMIT 1
Cost model:
funcs (full scan) -> O(number of functions), typically ~1000s, fast
instructions WHERE func_addr -> O(function_size / avg_insn_size)
instructions (no constraint) -> O(total_code_heads), potentially 100K+
blocks WHERE func_ea -> O(block_count_in_func), fast
cfg_edges WHERE func_ea -> O(block_count_in_func), fast
disasm_calls WHERE func_addr -> O(instructions_in_func), streaming
heads WHERE address -> O(1) IDA head check
heads next/prev LIMIT 1 -> O(distance to next/previous defined head)
instruction_operands address -> O(operands in one instruction)
instruction_operands func -> O(operands in one function)| 表名 | 架构 | 关键约束 | 说明 |
|---|---|---|---|
| 基于索引 | 无需约束 | 通过 |
| 迭代器 | | 函数项迭代器(快速) vs 全代码头扫描(缓慢) |
| 迭代器 | | 约束下推:仅遍历单个函数的块 |
| 迭代器 | | 等值过滤下推:复杂度为O(函数内的块数量) |
| 生成器 | | 惰性流处理,遵循LIMIT限制 |
| 生成器 | | 支持 |
| 迭代器 | | 地址查询会解码单条指令;函数查询会遍历单个函数 |
| 基于索引 | 无需约束 | 表数据量小,始终快速 |
| 迭代器 | 无需约束 | 遍历IDA的名称列表 |
核心规则:
- 始终快速——无需约束。
funcs - 若不使用
instructions会扫描所有代码头——针对单函数查询时务必使用func_addr。func_addr - 若不使用
blocks会遍历所有函数的流程图——始终添加约束。func_ea - 数据量通常较大。使用
heads获取条目详情,使用地址范围+address = X进行导航。ORDER BY address [DESC] LIMIT 1
成本模型:
funcs (全扫描) -> O(函数数量),通常约数千级,速度快
instructions WHERE func_addr -> O(函数大小 / 平均指令大小)
instructions (无约束) -> O(总代码头数量),可能达10万+
blocks WHERE func_ea -> O(函数内的块数量),速度快
cfg_edges WHERE func_ea -> O(函数内的块数量),速度快
disasm_calls WHERE func_addr -> O(函数内的指令数量),流处理
heads WHERE address -> O(1) IDA代码头检查
heads next/prev LIMIT 1 -> O(到下一个/上一个已定义代码头的距离)
instruction_operands address -> O(单条指令的操作数数量)
instruction_operands func -> O(单个函数的操作数数量)Additional Resources
附加资源
- For advanced CTE patterns and instruction lifecycle playbooks: references/disassembly-examples.md
- For additional table schemas (fchunks, heads, bytes, signatures, problems, fixups, etc.): references/disassembly-tables.md
- 高级CTE模式和指令生命周期指南:references/disassembly-examples.md
- 更多表结构(fchunks、heads、bytes、signatures、problems、fixups等):references/disassembly-tables.md