mcpField
D
disassembly

disassembly

github.com/allthingsida開発4965 回インストール3 週間前に更新
リポジトリ

disassembly について

disassemblyは、IDASQLを使ってバイナリを命令、関数、制御フローの観点から調べるスキルです。SQLによる分析と編集に対応し、意味の解釈、関係の分析、デバッグは別のスキルに引き継ぎます。

主な機能

  1. 01関数、セグメント、命令、オペランドの調査
  2. 02基本ブロックと制御フローエッジの分析
  3. 03解決済み呼び出し先と呼び出し箇所の型の検索
  4. 04名前、関数メタデータ、オペランド形式の編集

活用シーン

  1. 01関数内の命令列の確認
  2. 02呼び出し箇所を追跡して呼び出し先を調査
  3. 03バイナリの挙動を調べる際の制御フロー確認
  4. 04オペランド形式や関数・シンボル名の更新

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/allthingsida/idasql-skills --skill disassembly

インストール後、Claude Code で/disassemblyを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

agents/
openai.yaml
references/
disassembly-examples.md
disassembly-tables.md

詳細


トリガーとなる意図

以下の依頼でこのスキルを使用します:

  • 関数/セグメント/命令の調査
  • 逆アセンブル結果に基づく呼び出し箇所や制御フローの分析
  • オペランドの書式や低レベルのコード構造
  • 生のバイト列/命令レベルの根拠

以下に引き継ぎます:

  • AST/擬似コードの意味解釈には decompiler
  • 呼び出し元/呼び出し先の関係を重視するワークフローには xrefs
  • パッチ適用/ブレークポイント操作には debugger

最初に行うこと(ウォームスタート手順)

-- 1) Orientation
SELECT * FROM binary;

-- 2) Segment map
SELECT name, printf('0x%X', start_addr) AS start_addr, printf('0x%X', end_addr) AS end_addr, perm
FROM segments
ORDER BY start_addr;

-- 3) Largest functions (triage anchors)
SELECT name, printf('0x%X', addr) AS addr, size
FROM funcs
ORDER BY size DESC
LIMIT 20;

解釈の指針:

  • 実行可能なセグメントと、規模が大きい/接続性の高い関数から始めます。
  • 命令の多い対象をクエリするときは、早い段階で func_addr 制約を使用します。

障害と復旧

  • instructions/heads のクエリが遅い場合:
    • WHERE func_addr = X または範囲を絞った EA 範囲を追加します。
  • 想定したシンボル名が見つからない場合:
    • アドレスベースのワークフローに切り替え、後から names の更新で情報を補います。
  • 制御フローの挙動が曖昧な場合:
    • disasm_calls で照合し、その後 decompiler に引き継ぎます。

引き継ぎパターン

  1. disassembly -> 関係を展開するには xrefs。
  2. disassembly -> 意味を解釈するには decompiler。
  3. disassembly -> パッチ適用/ブレークポイントの実行には debugger。

エンティティテーブル

funcs

バイナリ内で検出されたすべての関数とプロトタイプ情報です。

ColumnTypeDescription
addrINT関数の開始アドレス
nameTEXT関数名
sizeINT関数のサイズ(バイト単位)
end_addrINT関数の終了アドレス
flagsINT関数フラグ
folder_pathTEXTFunction ウィンドウのルートからの相対パスで表した RW 関数フォルダー。NULL/'' はルートを意味します
full_pathTEXT関数名を含む RO の完全な dirtree パス

プロトタイプ列(型情報がある場合に設定されます):

ColumnTypeDescription
return_typeTEXT戻り値の型を表す文字列(例:"int"、"void *")
return_is_ptrINT戻り値の型がポインターの場合は 1
return_is_intINT戻り値の型が厳密に int の場合は 1
return_is_integralINT戻り値の型が整数型に類する場合(int、long、DWORD、BOOL)は 1
return_is_voidINT戻り値の型が void の場合は 1
arg_countINT関数の引数の数
calling_convTEXT呼び出し規約(cdecl、stdcall、fastcall など)
-- 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', addr) 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;

-- Functions organized by IDASQL annotation folders
SELECT addr, name, folder_path
FROM funcs
WHERE folder_path LIKE 'idasql/%'
ORDER BY folder_path, name;

書き込み操作:

-- Create a function
INSERT INTO funcs (addr) VALUES (0x401000);

-- Rename a function
UPDATE funcs SET name = 'my_func' WHERE addr = 0x401000;

-- Move a function into an IDA Function window folder
INSERT INTO dirtree_folders(tree, path) VALUES ('funcs', 'idasql/triage/network');
UPDATE funcs SET folder_path = 'idasql/triage/network' WHERE addr = 0x401000;

-- Move it back to root
UPDATE funcs SET folder_path = NULL WHERE addr = 0x401000;

-- Delete a function
DELETE FROM funcs WHERE addr = 0x401000;

フォルダーパスは相対 / パスです。IDASQL は、./..、重複する区切り文字、バックスラッシュ、空でないフォルダーの削除、および移動先がすでに存在するフォルダー名の変更を拒否します。

segments

メモリセグメントです。INSERT で領域を追加し、DELETE で削除し、UPDATE で start_addr (リベース/移動)、end_addr(サイズ変更)、name、class、perm を更新する CRUD 全操作に対応します。

ColumnTypeRWDescription
start_addrINTRWセグメントの開始位置。UPDATE するとセグメントをリベース(移動)します
end_addrINTRWセグメントの終了位置。UPDATE するとセグメントのサイズを変更します
nameTEXTRWセグメント名(.text、.data など)
classTEXTRWセグメントクラス(CODE、DATA)
permINTRW権限(R=4、W=2、X=1)
-- Find executable segments
SELECT name, printf('0x%X', start_addr) as start FROM segments WHERE perm & 1 = 1;

-- Rename a segment
UPDATE segments SET name = '.mytext' WHERE start_addr = 0x401000;

-- Add a region (e.g. SRAM for a raw firmware image), then rebase it
INSERT INTO segments(start_addr, end_addr, name, class, perm)
  VALUES (0x20000000, 0x20005000, 'SRAM', 'DATA', 6);
UPDATE segments SET start_addr = 0x08000000 WHERE name = '.text';  -- rebase
names

名前付きのすべての場所(関数、ラベル、データ)です。INSERT、UPDATE、DELETE に対応しています。

ColumnTypeRWDescription
addrINTRアドレス
nameTEXTRW名前
folder_pathTEXTRW名前フォルダーのパス。NULL はルートを意味します
full_pathTEXTR名前の完全な dirtree パス
-- Create/set a name
INSERT INTO names (addr, name) VALUES (0x401000, 'my_symbol');

-- Rename
UPDATE names SET name = 'my_symbol_renamed' WHERE addr = 0x401000;

-- Organize globals/labels into IDA name folders
UPDATE names SET folder_path = 'idasql/names/globals' WHERE name LIKE 'g_%';
UPDATE names SET folder_path = NULL WHERE addr = 0x401000;
entries

エントリーポイント(エクスポート、プログラムのエントリー、TLS コールバックなど)です。

ColumnTypeDescription
ordinalINTエクスポートの序数
addrINTエントリーアドレス
nameTEXTエントリー名

命令テーブル

命令

instructions は逆アセンブルテーブルです。特定の EA におけるスカラーの逆アセンブルテキストを取得するには、disasm_at(addr[, context]) を使用します。 関数または範囲の一覧が明示的に必要な場合は、disasm_func() または disasm_range() を使用します。 デコード済み命令では、DELETE(命令を未解析のバイトに変換)と、operand*_format_spec によるオペランド表現の更新がサポートされています。

WHERE func_addr = X は高速パスです(関数項目イテレーター)。これがない場合、テーブルはすべてのコードヘッドをスキャンします。

列型説明
addrINT命令アドレス
func_addrINT所属する関数
itypeINT命令タイプ(アーキテクチャ固有)
mnemonicTEXT命令ニーモニック
sizeINT命令サイズ
operand0..operand7TEXTオペランドテキスト(0..7)
disasmTEXT逆アセンブル行全体
operand0_class..operand7_classTEXTオペランドクラス:reg、imm、displ、mem、...
operand0_repr_kind..operand7_repr_kindTEXT現在の表現:plain、hex、dec、oct、bin、char、float、enum、offset、stroff、sizeof、segment、stkvar、forced
operand0_repr_type_name..operand7_repr_type_nameTEXTEnum/stroff/sizeof の型、オフセットの基準(16 進数)、または強制テキスト
operand0_format_spec..operand7_format_specTEXT (RW)特定のオペランドに表現を適用/解除します(下記の用語一覧を参照)
-- 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 addr, 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 addr = 0x401020;

-- Apply struct-offset representation to operand 0
-- e.g. makes `[rax+10h]` display as `[rax+command_t.field_name]`
UPDATE instructions
SET operand0_format_spec = 'stroff:command_t'
WHERE addr = 0x140001BE8;

-- Struct-offset with a base delta (subtracted before member resolution)
UPDATE instructions
SET operand0_format_spec = 'stroff:command_t,delta=16'
WHERE addr = 0x140001BE8;

-- Nested member path: separate type names with '/'
UPDATE instructions
SET operand0_format_spec = 'stroff:outer_t/inner_t'
WHERE addr = 0x140001BE8;

-- Clear representation back to plain
UPDATE instructions
SET operand1_format_spec = 'clear'
WHERE addr = 0x401020;

適用後にフォーマット指定が検証されます。UPDATE はオペランドを再読み込みし、結果の repr_kind、型パス、またはデルタが要求内容と一致しない場合、SQL エラーとして失敗します。確認するには operandN_repr_kind / operandN_repr_type_name を読み戻します。

operandN_format_spec の全用語一覧(すべて逆アセンブルレベルで利用でき、IDAPython は不要です):

指定効果
hex dec oct bin数値の基数
char文字定数
float浮動小数点
offset基準 0 のプレーンオフセット
offset:<base>ユーザー定義の基準を持つオフセット(<base> = シンボル名またはアドレス)
enum:<NAME>[,serial=N] / enum:<NAME>::<MEMBER>列挙型定数
stroff:<Type[/Nested...]>[,delta=N]構造体メンバーのオフセット
sizeof:<STRUCT>構造体サイズ定数 — size STRUCT として表示
segmentセグメントセレクター
stkvarスタック変数(オペランドはスタック参照である必要があります)
forced:<text>強制(手動)オペランドテキスト。例:forced:5 shl 3
clear / plain / noneデフォルトの表現に戻す

組み合わせ可能な修飾子(任意の基底へのサフィックス、または現在の表現を変更する単独指定):,signed / ,unsigned(負数表示を切り替えます)および ,bnot / ,nobnot(ビット単位 NOT の表示を切り替えます)。例:dec,signed、 hex,bnot、または signed のみ。

-- Number base, character, and sign/bitwise-not modifiers
UPDATE instructions SET operand1_format_spec = 'hex'        WHERE addr = 0x401020;
UPDATE instructions SET operand1_format_spec = 'dec,signed' WHERE addr = 0x401020;
UPDATE instructions SET operand1_format_spec = 'char'       WHERE addr = 0x401020;

-- Offsets (plain and user-defined base)
UPDATE instructions SET operand1_format_spec = 'offset'            WHERE addr = 0x401020;
UPDATE instructions SET operand1_format_spec = 'offset:tbl_start'  WHERE addr = 0x401020;

-- sizeof: an immediate equal to sizeof(STRUCT) renders as `size STRUCT`
UPDATE instructions SET operand1_format_spec = 'sizeof:FILEDEF' WHERE addr = 0x4015EB;

-- Forced operand text
UPDATE instructions SET operand1_format_spec = 'forced:5 shl 3' WHERE addr = 0x401020;
instruction_operands

デコードされた非voidオペランド1つにつき1行です。オペランドの型や値の詳細、および旧オペランド/デコードヘルパー関数の代替として結合可能な情報には、このテーブルを使用してください。

ColumnTypeDescription
addrINT命令アドレス
func_addrINT所属する関数
opnumINTオペランドのインデックス
textTEXTオペランドのテキスト
type_codeINTIDA オペランド型コード
type_nameTEXTオペランド型名(reg、imm、near など)
dtypeINTオペランドのデータ型
regINT該当する場合のレジスタ番号
op_addrINT該当する場合の参照アドレス/変位
raw_valueINTオペランドの生の値
valueINT可能な範囲で推定したスカラーオペランド値

注(addr と op_addr の違い): addr は命令アドレスです。オペランドが参照するアドレスは op_addr です。オペランドが指すターゲット(ジャンプ/呼び出し/データ参照など)が必要な場合は、op_addr を選択してください。addr はオペランドが属する命令を示すものであり、参照先を示すものではありません。

SELECT opnum, text, type_name, value
FROM instruction_operands
WHERE addr = 0x401000
ORDER BY opnum;

SELECT i.addr, i.itype, i.mnemonic, o.opnum, o.text, o.type_name, o.value
FROM instructions i
LEFT JOIN instruction_operands o
  ON o.addr = i.addr AND o.func_addr = 0x401000
WHERE i.func_addr = 0x401000
ORDER BY i.addr, o.opnum;

パフォーマンス: WHERE addr = X は1つの命令をデコードします。WHERE func_addr = X は O(function_size) の反復処理を行います。これらの制約がない場合、データベース全体をスキャンします。

disasm_calls

解決済みターゲットと、任意の呼び出し箇所プロトタイプの上書きを含む、すべての呼び出し命令です。

ColumnTypeDescription
func_addrINT呼び出しを含む関数
addrINT呼び出し命令のアドレス
callee_addrINTターゲットアドレス(不明な場合は0)
callee_nameTEXTターゲット名
callee_typeTEXTRW の呼び出し箇所プロトタイプ。UPDATE で適用/置換され、NULL または空値でクリア
-- Functions that call malloc
SELECT DISTINCT (SELECT name FROM funcs WHERE func_addr >= addr AND func_addr < end_addr LIMIT 1) as caller
FROM disasm_calls WHERE callee_name LIKE '%malloc%';

-- Apply/replace a call-site prototype, then clear it
UPDATE disasm_calls
SET callee_type = 'int (__fastcall *)(const char *path)'
WHERE addr = 0x401234;
UPDATE disasm_calls SET callee_type = NULL WHERE addr = 0x401234;

直接呼び出しに callee_type を適用しても、実際の呼び出し先シンボルは保持されるため、その後に呼び出し元を再度デコンパイルしても安全です(microcode INTERR は発生しません)。間接呼び出しでは、その呼び出し箇所に型が適用されます。空値/NULL で上書きをクリアします。


blocks

関数内の基本ブロックです。パフォーマンスのため、func_addr 制約を使用してください。

ColumnTypeDescription
func_addrINT所属する関数
start_addrINTブロック開始位置
end_addrINTブロック終了位置
sizeINTブロックサイズ
-- Blocks in a specific function (FAST - uses constraint pushdown)
SELECT * FROM blocks WHERE func_addr = 0x401000;

-- Functions with most basic blocks
SELECT (SELECT name FROM funcs WHERE func_addr >= addr AND func_addr < end_addr LIMIT 1) as name, COUNT(*) as blocks
FROM blocks GROUP BY func_addr ORDER BY blocks DESC LIMIT 10;
cfg_edges

基本ブロック間の制御フローグラフのエッジです。必ず WHERE func_addr = X を使用してください(filter_eq プッシュダウンにより、関数内のブロック数に対して O(blocks in function) で処理します)。

ColumnTypeDescription
func_addrINT所属する関数
from_blockINTソースブロックのアドレス
to_blockINTターゲットブロックのアドレス
edge_typeTEXTnormal(単一後続ブロック、またはフォールバックラベル)、true/false(2方向分岐の汎用的な第1/第2分岐。ラベルは後続ブロックの順序に従い、分岐成立/フォールスルーの意味には従いません)
-- Get CFG structure
SELECT * FROM cfg_edges WHERE func_addr = 0x401000;

-- Find branch points (conditional blocks)
SELECT from_block, COUNT(*) as succ_count
FROM cfg_edges WHERE func_addr = 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_addr = 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_addr = f.addr
            GROUP BY ce.from_block
            HAVING COUNT(*) > 1
        ) branch_blocks) as branch_sites,
       (SELECT COUNT(*) FROM disasm_loops dl WHERE dl.func_addr = f.addr) as loops,
       (SELECT COUNT(*) FROM disasm_calls dc WHERE dc.func_addr = f.addr) as calls_made
FROM funcs f
WHERE f.size > 32
ORDER BY branch_sites DESC
LIMIT 20;
function_chunks

関数チャンクごとに1行を格納するキャッシュ済みテーブルです。関数レベルの範囲または密度の指標が必要な場合は、func_addr で集計してください。

ColumnTypeDescription
func_addrINT関数アドレス
chunk_startINTチャンク開始アドレス
chunk_endINTチャンク終了アドレス
block_countINTチャンク内のブロック数
total_sizeINTチャンクの合計サイズ
SELECT * FROM function_chunks WHERE func_addr = 0x401000;

SQL Functions -- Disassembly

FunctionDescription
disasm_at(addr)対応するヘッドの標準リスティング行(コード/データの両方で動作)
disasm_at(addr, n)前後の n 個のヘッドを含む標準リスティング行
disasm(addr)指定アドレスの逆アセンブル行1行
disasm(addr, n)指定アドレスからの次の N 個の命令(件数ベース)
disasm_range(start, end)アドレス範囲 [start, end) 内のすべての逆アセンブル行
disasm_func(addr)指定アドレスを含む関数の逆アセンブル全体
make_code(addr)指定アドレスに命令を作成(1/0 を返します)
make_code_range(start, end)範囲内に命令を作成し、作成数を返します
逆アセンブルの例
-- 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(addr) 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 name FROM names WHERE addr = :addr LIMIT 1アドレスに対応する名前
SELECT name FROM funcs WHERE :addr >= addr AND :addr < end_addr LIMIT 1アドレスを含む関数
SELECT addr FROM funcs WHERE :addr >= addr AND :addr < end_addr LIMIT 1アドレスを含む関数の開始位置
SELECT end_addr FROM funcs WHERE :addr >= addr AND :addr < end_addr LIMIT 1アドレスを含む関数の終了位置

関数数とインデックス検索は、テーブル駆動です。

SELECT COUNT(*) AS function_count FROM funcs;
SELECT addr FROM funcs WHERE rowid = 0;

SQL 関数 -- ナビゲーション

定義済みアイテムのナビゲーションには heads の順序を使用し、表示文字列には SQLite の書式設定関数を使用します。アドレスの一致/範囲フィルターは最適化されており、ORDER BY addr または ORDER BY addr DESC は次/前のアイテム検索に利用されます。

SELECT addr
FROM heads
WHERE addr > 0x401000
ORDER BY addr
LIMIT 1;

SELECT addr
FROM heads
WHERE addr < 0x401000
ORDER BY addr DESC
LIMIT 1;

SELECT printf('0x%llx', addr) AS address_hex
FROM heads
LIMIT 10;

セグメント検索はテーブル駆動です。

SELECT name
FROM segments
WHERE 0x401000 >= start_addr
  AND 0x401000 < end_addr
LIMIT 1;

SQL 関数 -- アイテム分析

アイテムの分類、サイズ、生のフラグには heads を使用します。

SELECT addr, size, type, flags, disasm
FROM heads
WHERE addr = 0x401000;

SQL 関数 -- 命令の詳細

デコードされた命令の情報には instructions と instruction_operands を使用します。

SELECT addr, itype, mnemonic
FROM instructions
WHERE func_addr = 0x401000
LIMIT 10;

SELECT opnum, text, type_code, type_name, value
FROM instruction_operands
WHERE addr = 0x401000
ORDER BY opnum;

SELECT i.addr, 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.addr = i.addr AND o.addr = 0x401000
WHERE i.addr = 0x401000
ORDER BY o.opnum;

SQL 関数 -- ファイル生成

関数説明
gen_listing(path)データベース全体のリスティング出力(LST)を生成

SQL 関数 -- グラフ生成

関数説明
gen_cfg_dot(addr)CFG を DOT グラフ文字列として生成
gen_cfg_dot_file(addr, path)CFG の DOT をファイルに書き込み
gen_schema_dot()データベーススキーマを DOT として生成
-- Get CFG for a function as DOT format
SELECT gen_cfg_dot(0x401000);

パフォーマンスに関するルール

テーブルアーキテクチャ主な制約備考
funcsインデックスベース不要getn_func(i) により行ごとに O(1) — 常に高速
instructionsイテレーターfunc_addr関数アイテムのイテレーター(高速)とコードヘッド全体のスキャン(低速)
blocksイテレーターfunc_addr制約のプッシュダウン:1 つの関数のブロックを反復
cfg_edgesイテレーターfunc_addrfilter_eq のプッシュダウン:関数内のブロック数に対して O(blocks in function)
disasm_callsジェネレーターfunc_addr、書き込みには addr遅延ストリーミングで LIMIT を尊重。callee_type は書き込み可能
headsジェネレーターaddr =、アドレス範囲次/前のナビゲーションには ORDER BY addr を利用。広範囲のスキャンは大きくなる場合があります
instruction_operandsイテレーターaddr、func_addrアドレス検索は 1 つの命令をデコードし、関数検索は 1 つの関数を反復
segmentsインデックスベース不要小さなテーブルで、常に高速
namesイテレーター不要IDA の名前リストを反復

主なルール:

  • funcs は常に高速です — 制約は不要です。
  • func_addr を指定しない instructions は、すべてのコードヘッドをスキャンします — 関数単位のクエリでは func_addr を使用してください。
  • func_addr を指定しない blocks は、すべての関数のフローチャートを反復します — 必ず制約を指定してください。
  • heads は大きくなることがよくあります。アイテム情報には addr = X を使用し、ナビゲーションにはアドレス範囲と ORDER BY addr [DESC] LIMIT 1 を使用してください。

コストモデル:

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_addr         -> O(block_count_in_func), fast
cfg_edges WHERE func_addr      -> O(block_count_in_func), fast
disasm_calls WHERE func_addr -> O(instructions_in_func), streaming
disasm_calls UPDATE callee_type WHERE addr -> O(1) call-site lookup
heads WHERE addr          -> O(1) IDA head check
heads next/prev LIMIT 1      -> O(distance to next/previous defined head)
instruction_operands addr    -> O(operands in one instruction)
instruction_operands func    -> O(operands in one function)

追加リソース

  • 高度な CTE パターンと命令のライフサイクルに関する手順については、references/disassembly-examples.md を参照してください。
  • 追加のテーブルスキーマ(fchunks、heads、bytes、signatures、problems、fixups など)については、references/disassembly-tables.md を参照してください。

関連項目

  • decompiler — 同じ関数の疑似コードと ctree。逆アセンブルが煩雑すぎる場合に切り替えてください。
  • xrefs — 関数または呼び出しサイトを中心とした呼び出しグラフとデータ参照。
  • data — オペランドを対象としたバイト/文字列。バイト単位の読み取りには bytes テーブルを使用し、WHERE start_addr = X AND n = N と hex(blob_concat(value)) を組み合わせることで、範囲を限定したデータを一括で 16 進数表示できます。

コメント