disassembly

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese


Trigger 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:
  • decompiler
    for AST/pseudocode semantics
  • xrefs
    for relationship-heavy caller/callee workflows
  • debugger
    for patching/breakpoint actions

当用户询问以下内容时使用本技能:
  • 函数/段/指令检查
  • 基于反汇编的调用点或控制流分析
  • 操作数格式与底层代码结构
  • 原始字节/指令级证据
转向至:
  • decompiler
    (反编译器)用于AST/伪代码语义分析
  • 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
    func_addr
    constraints early when querying instruction-heavy surfaces.

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
      WHERE func_addr = X
      or tight EA ranges.
  • Missing expected symbol names:
    • Pivot to address-based workflows and enrich via
      names
      updates later.
  • Ambiguous control-flow behavior:
    • Cross-check with
      disasm_calls
      and then escalate to
      decompiler
      .

  • 针对
    instructions
    /
    heads
    的查询速度缓慢:
    • 添加
      WHERE func_addr = X
      或严格的EA范围限制。
  • 缺失预期的符号名称:
    • 切换到基于地址的工作流,后续通过
      names
      更新补充信息。
  • 控制流行为不明确:
    • 先通过
      disasm_calls
      交叉验证,再转向
      decompiler
      分析。

Handoff Patterns

移交模式

  1. disassembly
    ->
    xrefs
    for relation expansion.
  2. disassembly
    ->
    decompiler
    for semantic interpretation.
  3. disassembly
    ->
    debugger
    for patch/breakpoint execution.

  1. disassembly
    (反汇编)->
    xrefs
    (交叉引用):用于关系扩展。
  2. disassembly
    (反汇编)->
    decompiler
    (反编译器):用于语义解读。
  3. disassembly
    (反汇编)->
    debugger
    (调试器):用于补丁/断点执行。

Entity Tables

实体表

funcs

funcs

All detected functions in the binary with prototype information.
ColumnTypeDescription
address
INTFunction start address
name
TEXTFunction name
size
INTFunction size in bytes
end_ea
INTFunction end address
flags
INTFunction flags
Prototype columns (populated when type info available):
ColumnTypeDescription
return_type
TEXTReturn type string (e.g., "int", "void *")
return_is_ptr
INT1 if return type is pointer
return_is_int
INT1 if return type is exactly int
return_is_integral
INT1 if return type is int-like (int, long, DWORD, BOOL)
return_is_void
INT1 if return type is void
arg_count
INTNumber of function arguments
calling_conv
TEXTCalling 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;
二进制文件中所有带原型信息的已检测函数。
列名类型描述
address
INT函数起始地址
name
TEXT函数名称
size
INT函数字节大小
end_ea
INT函数结束地址
flags
INT函数标志位
原型列(当类型信息可用时填充):
列名类型描述
return_type
TEXT返回类型字符串(例如:"int", "void *")
return_is_ptr
INT若返回类型为指针则为1
return_is_int
INT若返回类型为int则为1
return_is_integral
INT若返回类型为类int类型(int、long、DWORD、BOOL)则为1
return_is_void
INT若返回类型为void则为1
arg_count
INT函数参数数量
calling_conv
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 (
name
,
class
,
perm
), and DELETE.
ColumnTypeRWDescription
start_ea
INTRSegment start
end_ea
INTRSegment end
name
TEXTRWSegment name (.text, .data, etc.)
class
TEXTRWSegment class (CODE, DATA)
perm
INTRWPermissions (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(
name
class
perm
字段)和DELETE操作。
列名类型读写权限描述
start_ea
INTR段起始地址
end_ea
INTR段结束地址
name
TEXTRW段名称(.text、.data等)
class
TEXTRW段类别(CODE、DATA)
perm
INTRW权限(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.
ColumnTypeRWDescription
address
INTRAddress
name
TEXTRWName
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操作。
列名类型读写权限描述
address
INTR地址
name
TEXTRW名称
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.).
ColumnTypeDescription
ordinal
INTExport ordinal
address
INTEntry address
name
TEXTEntry name

入口点(导出函数、程序入口、TLS回调等)。
列名类型描述
ordinal
INT导出序号
address
INT入口地址
name
TEXT入口名称

Instruction Tables

指令表

instructions

instructions

instructions
is the disassembly table. For scalar disassembly text at a specific EA, use
disasm_at(ea[, context])
. Use
disasm_func()
or
disasm_range()
when you explicitly need a function/range listing. Decoded instructions support DELETE (converts instruction to unexplored bytes) and operand representation updates via
operand*_format_spec
.
WHERE func_addr = X
is the fast path (function-item iterator). Without it, the table scans all code heads.
ColumnTypeDescription
address
INTInstruction address
func_addr
INTContaining function
itype
INTInstruction type (architecture-specific)
mnemonic
TEXTInstruction mnemonic
size
INTInstruction size
operand0..operand7
TEXTOperand text (
0..7
)
disasm
TEXTFull disassembly line
operand0_class..operand7_class
TEXTOperand class:
reg
,
imm
,
displ
,
mem
, ...
operand0_repr_kind..operand7_repr_kind
TEXTCurrent representation:
plain
,
enum
,
stroff
operand0_repr_type_name..operand7_repr_type_name
TEXTEnum name or stroff path
operand0_format_spec..operand7_format_spec
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;
instructions
是反汇编表。如需获取特定EA处的标量反汇编文本,使用
disasm_at(ea[, context])
。 当明确需要函数/范围列表时,使用
disasm_func()
disasm_range()
。 已解码的指令支持DELETE操作(将指令转换为未探索字节),并可通过
operand*_format_spec
更新操作数表示方式。
WHERE func_addr = X
是快速路径(函数项迭代器)。若不使用该约束,表会扫描所有代码头。
列名类型描述
address
INT指令地址
func_addr
INT所属函数
itype
INT指令类型(架构相关)
mnemonic
TEXT指令助记符
size
INT指令大小
operand0..operand7
TEXT操作文本(
0..7
disasm
TEXT完整反汇编行
operand0_class..operand7_class
TEXT操作数类别:
reg
imm
displ
mem
operand0_repr_kind..operand7_repr_kind
TEXT当前表示方式:
plain
enum
stroff
operand0_repr_type_name..operand7_repr_type_name
TEXT枚举名称或stroff路径
operand0_format_spec..operand7_format_spec
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.
ColumnTypeDescription
address
INTInstruction address
func_addr
INTContaining function
opnum
INTOperand index
text
TEXTOperand text
type_code
INTIDA operand type code
type_name
TEXTOperand type name (
reg
,
imm
,
near
, ...)
dtype
INTOperand dtype
reg
INTRegister number when applicable
addr
INTReferenced address/displacement when applicable
raw_value
INTRaw operand value
value
INTBest-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:
WHERE address = X
decodes one instruction;
WHERE func_addr = X
uses O(function_size) iteration. Without one of these constraints, it scans the entire database.
每个已解码的非空操作数对应一行。使用本表获取操作数类型/值详情,可替代旧的操作数/解码辅助函数进行关联查询。
列名类型描述
address
INT指令地址
func_addr
INT所属函数
opnum
INT操作数索引
text
TEXT操作数文本
type_code
INTIDA操作数类型代码
type_name
TEXT操作数类型名称(
reg
imm
near
等)
dtype
INT操作数数据类型
reg
INT适用时的寄存器编号
addr
INT适用时的引用地址/位移
raw_value
INT原始操作数值
value
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;
性能说明:
WHERE address = X
会解码单条指令;
WHERE func_addr = X
会遍历O(function_size)量级的内容。若不使用任一约束,会扫描整个数据库。

disasm_calls

disasm_calls

All call instructions with resolved targets.
ColumnTypeDescription
func_addr
INTFunction containing the call
ea
INTCall instruction address
callee_addr
INTTarget address (0 if unknown)
callee_name
TEXTTarget 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%';

所有已解析目标地址的调用指令。
列名类型描述
func_addr
INT包含该调用的函数
ea
INT调用指令地址
callee_addr
INT目标地址(未知则为0)
callee_name
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
func_ea
constraint for performance.
ColumnTypeDescription
func_ea
INTContaining function
start_ea
INTBlock start
end_ea
INTBlock end
size
INTBlock 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
约束条件。
列名类型描述
func_ea
INT所属函数
start_ea
INT块起始地址
end_ea
INT块结束地址
size
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
WHERE func_ea = X
(filter_eq pushdown, O(blocks in function)).
ColumnTypeDescription
func_ea
INTContaining function
from_block
INTSource block address
to_block
INTTarget block address
edge_type
TEXT
normal
(single-successor or fallback label),
true
/
false
(generic first/second arms for a two-way branch; labels follow successor order, not taken/fallthrough semantics)
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)边。务必使用
WHERE func_ea = X
(等值过滤下推,复杂度为O(函数内的块数量))。
列名类型描述
func_ea
INT所属函数
from_block
INT源块地址
to_block
INT目标块地址
edge_type
TEXT
normal
(单后继或回退标签)、
true
/
false
(双向分支的通用第一/第二分支;标签遵循后继顺序,不代表未执行/穿透语义)
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
func_addr
when you need function-level span or density metrics.
ColumnTypeDescription
func_addr
INTFunction address
chunk_start
INTChunk start address
chunk_end
INTChunk end address
block_count
INTNumber of blocks in chunk
total_size
INTTotal size of chunk
sql
SELECT * FROM function_chunks WHERE func_addr = 0x401000;

缓存表,每个函数块对应一行。当需要函数级跨度或密度指标时,按
func_addr
聚合。
列名类型描述
func_addr
INT函数地址
chunk_start
INT块起始地址
chunk_end
INT块结束地址
block_count
INT块内的基本块数量
total_size
INT块的总大小
sql
SELECT * FROM function_chunks WHERE func_addr = 0x401000;

SQL Functions -- Disassembly

SQL函数 -- 反汇编

FunctionDescription
disasm_at(addr)
Canonical listing line for containing head (works for code/data)
disasm_at(addr, n)
Canonical listing line with +/-
n
neighboring heads
disasm(addr)
Single disassembly line at address
disasm(addr, n)
Next N instructions from address (count-based)
disasm_range(start, end)
All disassembly lines in address range [start, end)
disasm_func(addr)
Full disassembly of function containing address
make_code(addr)
Create instruction at address (returns 1/0)
make_code_range(start, end)
Create instructions in range, returns created count
函数描述
disasm_at(addr)
对应代码头的标准列表行(适用于代码/数据)
disasm_at(addr, n)
包含前后
n
个相邻代码头的标准列表行
disasm(addr)
指定地址处的单条反汇编行
disasm(addr, n)
从指定地址开始的后续N条指令(按数量统计)
disasm_range(start, end)
地址范围[start, end)内的所有反汇编行
disasm_func(addr)
指定地址所属函数的完整反汇编内容
make_code(addr)
在指定地址创建指令(返回1/0表示成功/失败)
make_code_range(start, end)
在指定范围创建指令,返回创建的数量

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.
PatternDescription
SELECT name FROM names WHERE address = :ea LIMIT 1
Name at address
SELECT name FROM funcs WHERE :ea >= address AND :ea < end_ea LIMIT 1
Function containing address
SELECT address FROM funcs WHERE :ea >= address AND :ea < end_ea LIMIT 1
Start of containing function
SELECT end_ea FROM funcs WHERE :ea >= address AND :ea < end_ea LIMIT 1
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。
模式描述
SELECT name FROM names WHERE address = :ea LIMIT 1
指定地址处的名称
SELECT name FROM funcs WHERE :ea >= address AND :ea < end_ea LIMIT 1
指定地址所属的函数
SELECT address FROM funcs WHERE :ea >= address AND :ea < end_ea LIMIT 1
指定地址所属函数的起始地址
SELECT end_ea FROM funcs WHERE :ea >= address AND :ea < end_ea LIMIT 1
指定地址所属函数的结束地址
函数计数和索引查询基于表驱动:
sql
SELECT COUNT(*) AS function_count FROM funcs;
SELECT address FROM funcs WHERE rowid = 0;

SQL Functions -- Navigation

SQL函数 -- 导航

Use
heads
ordering for defined-item navigation and SQLite formatting functions for display strings. Address equality/range filters are optimized;
ORDER BY address
or
ORDER BY address DESC
is consumed for next/previous-item lookups.
sql
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;

使用
heads
排序进行已定义项导航,使用SQLite格式化函数生成显示字符串。地址等值/范围查询已优化;
ORDER BY address
ORDER BY address DESC
可用于查找下一个/上一个条目。
sql
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
heads
for item classification, size, and raw flags:
sql
SELECT address, size, type, flags, disasm
FROM heads
WHERE address = 0x401000;

使用
heads
进行条目分类、大小和原始标志位查询:
sql
SELECT address, size, type, flags, disasm
FROM heads
WHERE address = 0x401000;

SQL Functions -- Instruction Details

SQL函数 -- 指令详情

Use
instructions
and
instruction_operands
for decoded instruction facts:
sql
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;

使用
instructions
instruction_operands
获取已解码指令的详细信息:
sql
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函数 -- 文件生成

FunctionDescription
gen_listing(path)
Generate full-database listing output (LST)

函数描述
gen_listing(path)
生成全数据库列表输出(LST格式)

SQL Functions -- Graph Generation

SQL函数 -- 图生成

FunctionDescription
gen_cfg_dot(addr)
Generate CFG as DOT graph string
gen_cfg_dot_file(addr, path)
Write CFG DOT to file
gen_schema_dot()
Generate database schema as DOT
sql
-- Get CFG for a function as DOT format
SELECT gen_cfg_dot(0x401000);

函数描述
gen_cfg_dot(addr)
生成CFG的DOT图字符串
gen_cfg_dot_file(addr, path)
将CFG的DOT图写入文件
gen_schema_dot()
生成数据库架构的DOT图
sql
-- 获取某函数的CFG(DOT格式)
SELECT gen_cfg_dot(0x401000);

Performance Rules

性能规则

TableArchitectureKey ConstraintNotes
funcs
Index-Basednone neededO(1) per row via
getn_func(i)
-- always fast
instructions
Iterator
func_addr
Function-item iterator (fast) vs full code-head scan (slow)
blocks
Iterator
func_ea
Constraint pushdown: iterates blocks of one function
cfg_edges
Iterator
func_ea
filter_eq pushdown: O(blocks in function)
disasm_calls
Generator
func_addr
Lazy streaming, respects LIMIT
heads
Generator
address =
, address range
Consumes
ORDER BY address
for next/previous navigation; broad scans can still be large
instruction_operands
Iterator
address
,
func_addr
Address lookup decodes one instruction; function lookup iterates one function
segments
Index-Basednone neededSmall table, always fast
names
Iteratornone neededIterates IDA's name list
Key rules:
  • funcs
    is always fast -- no constraint needed.
  • instructions
    without
    func_addr
    scans every code head -- use
    func_addr
    for per-function queries.
  • blocks
    without
    func_ea
    iterates all functions' flowcharts -- always constrain.
  • heads
    is often large. Use
    address = X
    for item facts and address range plus
    ORDER BY address [DESC] LIMIT 1
    for navigation.
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)

表名架构关键约束说明
funcs
基于索引无需约束通过
getn_func(i)
实现O(1)每行查询——始终快速
instructions
迭代器
func_addr
函数项迭代器(快速) vs 全代码头扫描(缓慢)
blocks
迭代器
func_ea
约束下推:仅遍历单个函数的块
cfg_edges
迭代器
func_ea
等值过滤下推:复杂度为O(函数内的块数量)
disasm_calls
生成器
func_addr
惰性流处理,遵循LIMIT限制
heads
生成器
address =
、地址范围
支持
ORDER BY address
进行下一个/上一个导航;大范围扫描仍可能耗时
instruction_operands
迭代器
address
func_addr
地址查询会解码单条指令;函数查询会遍历单个函数
segments
基于索引无需约束表数据量小,始终快速
names
迭代器无需约束遍历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