connect について
connectは、IDAデータベースまたは生バイナリを開いて解析セッションを確立するidasqlスキルです。起動手順、スキーマ確認、実行モード、エージェント向けのクエリと変更の規約を説明します。
主な機能
- 01IDAデータベースまたは生バイナリを開く
- 02データベースの初期情報を確認
- 03複雑なクエリの前にスキーマを調査
- 04HTTPまたはMCPサーバーモードを起動
- 05安全なクエリと変更の手順を確認
活用シーン
- 01生の実行ファイルから解析を開始
- 02旧形式データベースのアップグレード後に再接続
- 03データベースのサーバー自動起動を設定
- 04解析クエリに適したスキルを選択
MCP 対応
idasqlのHTTPおよびMCPサーバーモードと、データベース単位の自動起動設定を説明します。また、MCPのクエリインターフェースとリクエスト上の制約を扱います。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ allthingsida/ idasql-skills --skill connectインストール後、Claude Code で/connectを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/cli-reference.mdoptimization-checklist.mdschema-catalog.mdserver-guide.md詳細
CLI ヘルプ(idasql --help の原文)
idasql vX.Y.Z - SQL interface to IDA databases
Usage: idasql -s <file> [-q <query>] [-f <file>] [-i] [--export <file>]
Options:
-s <file> IDA database (.idb/.i64) OR raw binary (.exe/.dll/firmware/etc.)
— raw binaries trigger fresh idalib analysis and string-list rebuild
— legacy 32-bit .idb files upgrade to .i64 and require an explicit reopen
--token <token> Auth token for HTTP/MCP server mode (if server requires it)
-q <sql> Execute SQL query or semicolon-separated script
-f <file> Execute SQL from file
-i Interactive REPL mode
-w, --write Save database on exit (persist changes)
--export <file> Export tables to SQL file (local mode only)
--export-tables=X Tables to export: * (all, default) or table1,table2,...
--http [port] Start HTTP REST server (default: 8080, local mode only)
--bind <addr> Bind address for HTTP/MCP server (default: 127.0.0.1)
--mcp [port] Start MCP server (default: random port, use in -i mode)
Or use .mcp start in interactive mode
-h, --help Show this help
--version Show version
Examples:
idasql -s test.i64 -q "SELECT name, size FROM funcs LIMIT 10"
idasql -s test.i64 -f queries.sql
idasql -s test.i64 -i
idasql -s test.i64 --export dump.sql
idasql -s test.i64 --http 8080
idasql -s sample.exe --http # raw PE: idalib auto-analyzes, then serves SQL (default port 8080)
idasql -s firmware.bin -q "SELECT * FROM binary"
idasql -s test.i64 --mcp 9000
要点: -s には、既存の IDA データベースまたは未加工のバイナリを指定できます。事前に idat -A -B / ida -B を手動で実行する必要はありません。-s に .exe/.dll/ファームウェアなどを直接指定すると、初回オープン時に idalib がデータベースを作成します。
追加リソース
- 標準スキーマカタログ:references/schema-catalog.md
- CLI リファレンス、REPL コマンド、サーバーモード、ランタイム制御:references/cli-reference.md
(
.pinによる自動起動を含みます。データベースを開いたときに、IDA プラグインがピン留めされた HTTP/MCP サーバーを自動起動できます)
自動起動のピン留め(HTTP/MCP)
.pin http|mcp [bindinterface] [port] でサーバーをピン留めすると、データベースを開いたときに IDA プラグインが自動起動します(ピン留め設定は IDB に保存されます。CLI での変更を保持するには -w が必要です)。ポートは省略可能です。
- 固定ポート —
.pin http 0.0.0.0 8080→ 起動のたびに同じポートで自動起動します(安定した自動化に使用します)。 - ランダムポート —
.pin http(ポートを省略し、0として保存)→ 起動のたびに新しいランダムポートで自動起動します(「未設定」ではなく、実際のピン留め設定です)。選択されたポートは稼働中のステータスで確認できます。.pin statusには<random port each launch>と表示されます。
[bindinterface] はホスト/インターフェースです(デフォルトは 127.0.0.1)。.pin on|off http|mcp はホスト/ポートを保持したまま自動起動を切り替えます。.pin clear [http|mcp|all] はピン留め設定を削除します。ポートを指定せずに .http start / .mcp start を実行すると、ピン留めされたホスト/ポートが再利用されます。完全な構文については、references/cli-reference.md を参照してください。
- 最適化の品質ゲート:references/optimization-checklist.md
- HTTP サーバーガイド:references/server-guide.md
クイックスタートの注意事項
- 必ず
-s <file>を指定してください。ファイルには IDA データベース(.idb/.i64)または未加工のバイナリ(.exe、.dll、ファームウェアのバイナリなど)を指定できます。未加工のバイナリを指定すると、idalib による新規の自動解析と文字列リストの再構築が行われます。idat -A -Bで事前に IDB を作成しないでください。idasql -s raw.exeだけで一度に処理できます。 idasql -s legacy.idb ...がコード3で終了し、標準出力の JSON に{"status":"upgraded","reopen_with":"..."}が含まれる場合は、-s <reopen_with>を指定して、同じ要求された操作を再実行してください。この場合、サーバーモードはバインドする前に終了します。- HTTP/MCP サーバーのシャットダウン時を含め、終了時に編集内容を保持する場合は
--writeを使用してください。 -q、HTTP/query、MCPidasql_query、プラグイン CLI に渡す SQL 入力には、単一のステートメントまたはセミコロン区切りのスクリプトを指定できます。引用符で囲まれた文字列内のセミコロンは安全です。- すべての
/query応答は標準のスクリプトエンベロープを使用します — 単一のステートメントでも、1 件の要素を持つ配列になります。{success, statement_count, results:[{statement_index, success, columns, rows, row_count, elapsed_ms, error}], row_count_total, elapsed_ms_total, first_error_index}。 デフォルトではエラー時に処理を停止します。REPL/プラグインの.httpサーバーのみ、クエリ文字列の?continue_on_error=1を受け付け、それ以前のステートメントが失敗していてもすべてのステートメントを実行します。CLI の--httpハンドラーはこれを無視し、MCP にはこの引数がありません。 - クエリを書く前にスキーマを確認してください。
- REPL:
.schema <table> - SQL:
PRAGMA table_xinfo(<table>);
- REPL:
- 最初に
SELECT * FROM binary;を実行して概要を把握してください。
スキーマカタログ
標準的なカラム構成とオーナースキルの対応表は references/schema-catalog.md にあります。pragma_table_list と pragma_table_xinfo をもとにしています。あまり一般的でない項目のカラム名を想定する前に参照してください。
セッション開始時の契約
詳細な分析に入る前に、次の起動フローを必ずこの順序で実行してください。
- データベースに接続します(
-s、-i、または--http)。-sでは既存の IDB (.idb/.i64)または生のバイナリ(.exe/.dll/ファームウェアなど)を指定できます。idatで 事前に IDB をビルドしてはいけません。idasql -s raw.exeにビルドさせてください。 レガシー.idbがアップグレードされ、status:"upgraded"が返された場合は、 オリエンテーションを実行する前に、JSON のreopen_withパスを使って再起動してください。 - オリエンテーションのクエリを実行します。
SELECT * FROM binary;
- 主要なエンティティが存在することを確認します。
SELECT COUNT(*) AS funcs FROM funcs;
SELECT COUNT(*) AS xrefs FROM xrefs;
SELECT COUNT(*) AS strings FROM strings;
- 複雑な SQL を作成する前に、対象の領域のスキーマを確認します。
PRAGMA table_xinfo(funcs);
PRAGMA table_xinfo(xrefs);
- 以下のルーティングマトリックスを使って、ドメインスキルに振り分けます。
エージェント共通の契約
これらの契約はすべての idasql スキルに適用され、共通のエージェント動作モデルとして扱う必要があります。
先に読み取る契約
- 書き込み(
INSERT/UPDATE/DELETE)の前に、現在の状態を読み取ります(SELECT)。 - 安定した識別子(
addr、func_addr、idx、label_num)を使って、対象を正確に確認します。
推測禁止の契約
- 使用頻度の低い領域のカラムや型を推測してはいけません。
- 不確かなクエリを実行する前に、
.schemaまたはPRAGMA table_xinfo(...)でスキーマを確認します。
必須の変更ループ
- 現在の状態を読み取ります。
- 変更を適用します。
- 必要に応じて更新します(逆コンパイラの領域では
decompile(..., 1)を実行します)。 - 再度読み取り、期待どおりの変更が行われたことを確認します。
パフォーマンスの契約
- コストの高い領域(
xrefs、instructions、ctree*、pseudocode)には、必ずキー列で絞り込みを適用します。 - 逆コンパイラの領域では、広範囲のスキャンを明示的に求められた場合を除き、
func_addr = Xを必須とします。 dirtree_entriesを生の状態で参照する場合は、tree = ?とpath、path LIKE、またはparent_pathを組み合わせる方法を優先します。通常の整理にはfuncs.folder_pathとtypes.folder_pathを使用します。dirtree_entriesは読み取り専用の診断用です。再帰的なフォルダー削除と、生データの復旧/リンク操作は SQL からは実行できません。
失敗時の復旧契約
no such table/columnが発生した場合は、スキーマを確認してから再試行します。- 結果が空の場合は、アドレス範囲、テーブルの鮮度(
rebuild_strings())、実行時の機能を確認します。 - タイムアウトした場合は、対象範囲を絞り、制約を追加し、ページ分割するか、クエリを分割します。
出力の契約
- 選択 - ユーザーの意図に応じて、どの情報をどれだけ提示するかを決めます。質問には直接回答します(「最大のものは
mainで、500 バイトです」)。ユーザーが確認するのに役立つ場合に限り、根拠となる行を示します。求められていないのにテーブル全体を出力してはいけません。また、推論の中間段階でのみ取得したデータを提示してはいけません。 - 忠実性 - コード/データを提示する場合は、言い換えではなく、実際の成果物(逆コンパイル結果、実際の行)を示します。
- 仕組み - HTTP の
/queryレスポンスは JSON エンベロープ({success, results:[{columns,rows,...}]})です。これを直接読み取り、返信に表示します。レスポンスをpython/jqに渡してテーブルを事前に整形してはいけません。そうするとsuccess/elapsed_ms/errorフィールドが失われ、情報が欠落した表示をもとに推論することになります。CLI(-q/-f)はすでにテーブルを出力します。jq/pythonは、後続のクエリに渡す値を抽出する場合に限って使用します。(ターミナル/パイプで直接使う場合、サーバーは?format=text|csv|tsvを出力できます。エージェントはjsonを読み取ります。)
スキルルーティングマトリックス(意図 -> スキル)
初期ルーティングには、以下の決定的なマッピングを使用します。
| ユーザーの意図 | 主なスキル | 一般的な最初のクエリ |
|---|---|---|
| 「このバイナリは何をするのか?」/トリアージ | analysis | SELECT * FROM entries; |
| 逆アセンブル、セグメント、命令 | disassembly | SELECT * FROM funcs LIMIT 20; |
| 関数/型のフォルダー、レビュー用バケット、フォルダーのライフサイクル | annotations / types | SELECT addr, name, folder_path FROM funcs WHERE folder_path LIKE 'idasql/%'; |
| xref/呼び出し元/呼び出し先/インポート依存関係 | xrefs | SELECT * FROM xrefs WHERE to_addr = ...; |
| 名前パターンで関数/型/ラベル/メンバーを検索 | grep | SELECT name, kind, addr FROM grep WHERE pattern = 'main' LIMIT 20; |
| 文字列/バイト/パターン検索 | data | SELECT * FROM strings LIMIT 20; |
| デコンパイル/疑似コード/ctree/lvars | decompiler | SELECT decompile(0x...); |
| コメント/名前変更/型の再指定/ブックマーク | annotations | 更新前に対象行に対して SELECT ... を実行 |
| 型の作成/構造体/列挙型/メンバーの作業 | types | SELECT * FROM types LIMIT 20; |
| ブレークポイント/パッチ適用 | debugger | SELECT * FROM breakpoints; |
| 永続的なキー/値メモ | storage | SELECT * FROM netnode_kv LIMIT 20; |
| SQL 関数の検索/シグネチャの確認 | functions | SELECT * FROM pragma_function_list; |
| ランタイム設定/タイムアウト/キュー設定の列挙 | connect | SELECT * FROM runtime_settings;(読み取り専用。変更するには PRAGMA idasql.<key> = <value> を使用) |
| ライブ IDA UI コンテキストに関する質問 | ui-context | SELECT get_ui_context_json();(利用可能な場合) |
| SQL の対象範囲にない、IDA SDK のみで実現できるロジック | idapython | PRAGMA idasql.enable_idapython = 1; SELECT idapython_snippet('print(...)'); |
| 再帰的なソース/構造の復元 | re-source | 関数から開始して、再帰的に調査/引き継ぎ |
プロンプトが複数の領域にまたがる場合は、次の順序で実行します。
connectで概要を把握- 主な領域のスキル
- 情報を補完する関連スキル(例:
xrefs+decompiler+annotations)
スキル横断の実行手順
手順:未知のバイナリのトリアージ -> 疑わしい関数の詳細調査 -> 注釈付け
analysis:インポート/文字列/呼び出しパターンから候補を特定します。xrefs/disassembly:呼び出しグラフと呼び出し箇所をマッピングします。decompiler:ロジックと変数の意味を調査します。annotations:変更ループを使用してコメント/名前変更/型を適用します。
手順:文字列 IOC -> 参照グラフ -> パッチ適用
data:候補となる文字列とアドレスを特定します。xrefs:呼び出し元関数への参照をマッピングします。debuggerまたはannotations:特定の箇所にパッチを適用するか、注釈を付けます。
手順:疑似コードからの型の復元
decompiler:lvars、呼び出し引数、ctree のパターンを調査します。types:構造体/列挙型を作成または調整し、宣言を適用します。annotations:名前/コメントを仕上げ、表示される疑似コードを確認します。
UI コンテキストのルーティング
「何を見ているの?」「何が選択されているの?」「画面には何が表示されているの?」「今やっていることを見て」などのプロンプトや、「これ/現在のもの/あれ」への言及には、専用の ui-context スキルを使用します。
ui-context が管理するもの:
get_ui_context_json()の取得/再利用ポリシー- 時間に関する参照ルール(「これ」と「あれ」の違い)
- 応答テンプレート、例、フォールバックメッセージ
ランタイムに関する注意:
get_ui_context_json()はプラグインの GUI ランタイムでのみ使用でき、idalib/CLI モードでは使用できません。- 利用できない場合は、UI コンテキストを利用できないことを伝え、UI に依存しない SQL ワークフローを続行します。
binary
セッションのメタデータをすばやく確認するための、データベース概要情報です。 これはメタデータのみを対象としており、UI コンテキストの取得に代わるものではありません。
キーと値の形式は (key TEXT, value TEXT, type TEXT) で、メタデータの事実ごとに1行を使用します。type ∈ {string, hex, bool, int} です。形式と正規キー名はツールファミリー全体で共通のため、同じ WHERE key = '…' クエリをすべてのエンジンで使用できます。summary の行が最初に出力されるため、SELECT * FROM binary を実行すると要約が先頭に表示されます。
| キー | 型 | 説明 |
|---|---|---|
summary | string | データベースの1行要約(最初の行) |
tool_name | string | 常に idasql |
tool_version | string | IDASQL のビルドバージョン(正規名) |
idasql_version | string | IDASQL のビルドバージョン(旧名の重複項目) |
processor | string | プロセッサー/モジュール名 |
filetype | string | ローダーのファイル形式の説明(例:PE、ELF) |
image_base | hex | イメージベースアドレス |
entry_point | hex | エントリー/開始アドレス(以前の start_addr 列) |
min_addr | hex | データベース内の最小アドレス |
max_addr | hex | データベース内の最大アドレス |
is_64bit | bool | true/false |
bits | int | アプリケーションのビット数:16、32、または64 |
endianness | string | little または big |
filename | string | 入力ファイル名のみ(パスなし) |
entry_name | string | エントリーシンボル名(判明している場合) |
funcs_count | int | 検出された関数の数 |
segments_count | int | セグメント数 |
names_count | int | 名前付きアドレスの数 |
strings_count | int | 現在の IDA 文字列リストの件数 |
input_file_path | string | IDB に記録された元の入力ファイルパス |
idb_path | string | ディスク上の IDB/I64 のパス(移動されている場合は異なることがあります) |
md5 | string | 入力ファイルの小文字16進数 MD5(利用できない場合は空) |
sha256 | string | 入力ファイルの小文字16進数 SHA-256(利用できない場合は空) |
この接続がどのバイナリ/インスタンスに紐付いているか確認するには、filename、idb_path、md5、または sha256 キーを使用してください。
SELECT * FROM binary;
SELECT key, value FROM binary WHERE key IN ('filename','idb_path','md5','sha256');
SELECT value FROM binary WHERE key = 'idasql_version';
正規スキーマと所有者の対応については、references/schema-catalog.md を参照してください。
IDA とは何か、なぜ SQL なのか
IDA Pro は、業界標準の逆アセンブラーおよびリバースエンジニアリングツールです。コンパイル済みバイナリ(実行ファイル、DLL、ファームウェア)を解析し、次の情報を生成します。
- 逆アセンブル結果 - 人が読めるアセンブリコード
- 関数 - 名前付きの、検出されたコード境界
- クロスリファレンス - どの関数が何を呼び出すか、どのデータがどこから参照されるか
- 型 - 構造体、列挙型、関数プロトタイプ
- デコンパイル結果 - C に似た擬似コード(Hex-Rays プラグインを使用)
IDASQL は、こうした解析データをすべて SQL 仮想テーブル経由で公開し、次のことを可能にします。
- 複数のデータ型をまたいだ複雑なクエリ(JOIN)
- 集計と統計(COUNT、GROUP BY)
- バイナリ全体を対象としたパターン検出
- IDA プラグインや IDAPython スクリプトを作成せずに、スクリプトで解析を実行
バイナリ解析の基本概念
アドレス(ea_t)
バイナリ内のすべての要素にはアドレスがあります。これは、コードやデータが存在するメモリ位置です。IDA では、ea_t(実効アドレス)を符号なし 64 ビット整数として使用します。SQL では整数として表示されます。16 進数で表示するには、printf('0x%X', addr) を使用してください。
アドレスを受け取る SQL 関数では、次の値を使用できます。
- 整数の EA 値(決定的なスクリプトを作成する場合に推奨)
- 数値文字列(
'4198400'、'0x401000') get_name_ea(BADADDR, name)で解決されるシンボル名(グローバル名)
ほとんどのテーブル述語では、addr = 0x401000 のようにアドレス列と整数の EA を
比較します。applied_types.addr は意図的な例外で、等価フィルターや書き込みでは、
数値文字列やシンボル名も受け付けるため、名前を直接指定して型を適用できます。
例:
SELECT decompile('DriverEntry');
UPDATE applied_types
SET decl = 'NTSTATUS DriverEntry(PDRIVER_OBJECT, PUNICODE_STRING);'
WHERE addr = 'DriverEntry';
SELECT (SELECT comment FROM comments WHERE addr = 0x401000 LIMIT 1);
対象の EA を解決した後、comments テーブルからアドレスのコメントを読み取ります。
シンボルを解決できない場合、SQL 関数は次のような明示的なエラーを返します。
Could not resolve name to address: <name>。
特定の from コンテキストに依存するローカルラベルの検索は、デフォルトでは参照されません(BADADDR 解決)。必要に応じて、明示的な数値 EA を使用してください。
関数
IDA はコードを関数にまとめ、次の情報を持たせます。
addr/start_addr- 関数の開始位置end_addr- 関数の終了位置name- 割り当てられた名前、または自動生成された名前(例:main、sub_401000)size- 関数の合計バイト数
関数に属さないアドレスや逆アセンブルリストもあります。IDASQL では、引き続きバイトや逆アセンブルリストの範囲などを取得できます。
単一 EA の逆アセンブル(コードまたはデータ)には、関数スコープのクエリではなく、disasm_at(addr[, context]) を優先してください。
相互参照(xrefs)
バイナリ解析では、関係性を理解することが重要です。
- コード xref - 関数呼び出し、コード間のジャンプ
- データ xref - コードによるデータ位置の読み取りや書き込み、またはデータから別のデータへの参照(ポインター)
from_addr->to_addrは「アドレス X がアドレス Y を参照する」ことを表します テーブル:xrefs(from_addr, to_addr, type, is_code)を使用します。
セグメント
テーブル:segments(start_addr, end_addr, name, class, perm) を使用します(CRUD 全対応)。
UPDATE start_addr はセグメントのリベース、end_addr はセグメントのサイズ変更を行います。
メモリは、用途の異なるセグメントに分割されています。たとえば、一般的な PE ファイルには次のセグメントがあります。
.text- 実行可能コード(通常).data- 初期化済みグローバルデータ.rdata- 読み取り専用データ(文字列、定数).bss- 未初期化データ
もちろん、セグメント名や種類は異なる場合があります。メモリレイアウトを把握するには、segments テーブルをクエリしてください。
基本ブロック
関数内の基本ブロックは、直線的に実行されるコード列です。
- 途中に分岐がない
- エントリと出口がそれぞれ 1 つ
- 制御フロー解析に役立つ
テーブル:
blocks(start_addr, end_addr, func_addr, size)を使用します。
逆コンパイル(Hex-Rays)
Hex-Rays デコンパイラは、アセンブリを C 風の疑似コードに変換します。
- ctree - 逆コンパイルされたコードの抽象構文木
- lvars - デコンパイラが検出したローカル変数
- 生のアセンブリよりもはるかに解析しやすい
デコンパイラの主な機能:
decompile(addr)(主要な読み取り/表示機能)- 関数全体を 1 つのテキストブロックとして返します。
- 各出力行には、アドレスを対応付けるための接頭辞が付きます。
- アドレス付きの行:
/* 401010 */ ... - アドレスに紐付かない行:
/* */ ...(その行にはアドレスのアンカーがありません)
- アドレス付きの行:
- ユーザーが「逆コンパイルして」「コードを表示して」「疑似コードを表示して」「関数のロジックを説明して」と依頼した場合、まずこれを使用します。
pseudocodeテーブル(構造化/編集機能)- 行単位のフィルタリング(
func_addr、addr、line_num)や、addr + comment_placementをキーとするコメントの書き込みに使用します。 - まず書き込み可能な疑似コードのアンカーを解決してください。
addr == func_addrだと決めつけないでください。 - 関数全体のコードを表示する場合、優先される表示機能ではありません。
- 行単位のフィルタリング(
- AST レベルの解析には
ctreeとctree_call_argsを使用します - ローカル変数の名前変更、型の変更、コメントの更新には
ctree_lvarsを使用します
パフォーマンスに関するルール
重要:制約のプッシュダウン
一部のテーブルには、効率的な IDA SDK API を使用する最適化フィルターがあります。
| テーブル | 最適化フィルター | フィルターなし |
|---|---|---|
instructions | func_addr = X | O(全命令数) - 低速 |
blocks | func_addr = X | O(全ブロック数) |
xrefs | to_addr = X または from_addr = X | O(全 xrefs 数) |
pseudocode | func_addr = X | すべての関数を逆コンパイルします |
ctree* | func_addr = X | すべての関数を逆コンパイルします |
逆コンパイラーテーブルは必ず func_addr でフィルターしてください!
整数比較を使用する
-- SLOW: String comparison
WHERE mnemonic = 'call'
-- FAST: Integer comparison
WHERE itype IN (16, 18) -- x86 call opcodes
O(1) のランダムアクセス
-- SLOW: O(n) - sorts all rows
SELECT addr FROM funcs ORDER BY RANDOM() LIMIT 1;
-- FAST: O(1) - direct index access
SELECT addr
FROM funcs
WHERE rowid = ABS(RANDOM()) % (SELECT COUNT(*) FROM funcs);
CTE を先に使う変更ワークフロー
命令のライフサイクルを編集する際は、まず CTE を使用して対象を正確に特定してから、変更してください。
WITH target AS (
SELECT addr
FROM instructions
WHERE func_addr = 0x401000
ORDER BY addr DESC
LIMIT 1
)
DELETE FROM instructions
WHERE addr IN (SELECT addr FROM target);
SELECT make_code_range(addr, end_addr) FROM funcs WHERE addr = 0x401000;
これにより、人間にもエージェントにも、変更対象の範囲が明確で予測可能になります。
概要:用途に応じた選び方
| 目的 | テーブル/関数 |
|---|---|
| すべての関数を一覧表示する | funcs(列:addr、name、end_addr、prototype、flags、…)→ disassembly |
| 戻り値の型で関数を検索する | funcs WHERE return_is_integral = 1 |
| 引数の数で関数を検索する | funcs WHERE arg_count >= N |
| void 関数 | funcs WHERE return_is_void = 1 |
| ポインターを返す関数 | funcs WHERE return_is_ptr = 1 |
| 呼び出し規約で関数を検索する | funcs WHERE calling_conv = 'fastcall' |
| 呼び出し元と呼び出し先を検索する | is_code = 1 を指定した xrefs |
| データ参照を検索する | is_code = 0 を指定した xrefs |
| インポートを分析する | imports(列:addr、name、ordinal、module)→ xrefs / analysis |
| 文字列を検索する | strings(列:addr、length、content)→ data |
| 文字列の種類を設定する | rebuild_strings(minlen, types) |
| 命令を分析する | instructions WHERE func_addr = X |
| 削除された命令を再作成する | make_code(addr)、make_code_range(start, end) |
| アドレスの型宣言を適用/解除する | applied_types(INSERT、UPDATE decl、DELETE) |
| 呼び出し箇所のプロトタイプを適用/解除する | UPDATE disasm_calls SET callee_type = ... WHERE addr = X |
| EA に関数を作成する | INSERT INTO funcs(addr) VALUES (...) |
| 関数の逆アセンブルを表示する | disasm_func(addr) または disasm_range(start, end) |
| 逆コンパイル済みコードを表示する | decompile(addr) |
| UI/画面のコンテキストに関する質問 | ui-context スキル(get_ui_context_json()、プラグイン UI のみ) |
| 逆コンパイラーのコメントを編集する | 書き込み可能なアンカーを解決し、UPDATE pseudocode SET comment = '...' WHERE func_addr = X AND addr = Y を実行する |
| AST パターンマッチング | ctree WHERE func_addr = X |
| 呼び出しパターン | ctree_v_calls、disasm_calls |
| 制御フロー | ctree_v_loops、ctree_v_ifs |
| 戻り値の分析 | ctree_v_returns |
| 特定の値を返す関数 | ctree_v_returns WHERE return_num = 0 |
| 値をそのまま返す関数 | ctree_v_returns WHERE returns_arg = 1 |
| ラッパー関数 | ctree_v_returns WHERE returns_call_result = 1 |
| 変数の分析 | ctree_lvars WHERE func_addr = X |
| 型情報 | types、types_members |
| 関数シグネチャ | types_func_args(型分類を含む) |
| 戻り値の型で関数を検索する | types_func_args WHERE arg_index = -1 |
| typedef を考慮した型クエリ | types_func_args(表層型と解決済み型) |
| 隠れたポインター型 | types_func_args WHERE is_ptr = 0 AND is_ptr_resolved = 1 |
| ブレークポイントを管理する | breakpoints(CRUD 全般) |
| セグメントを変更する | segments(INSERT/UPDATE/DELETE) |
| 逆コンパイラーのラベル名を変更する | UPDATE ctree_labels SET name=... WHERE func_addr=... AND label_num=... |
| 命令を削除する | instructions(DELETE により未探索バイトに変換) |
| 命令を再作成する | make_code、make_code_range |
| ファイルのバイト列から一括パッチを適用する | load_file_bytes(path, file_offset, addr, size[, patchable]) |
| EA から物理オフセットへのマッピング | マッピング済みバイト行の bytes.fpos(NULL はファイルオフセットがないことを示します) |
| 型を作成する | types(struct/union/enum を INSERT) |
| 構造体メンバーを追加する | types_members(INSERT) |
| enum 値を追加する | types_enum_values(INSERT) |
| データベースを変更する | funcs、names、comments、bookmarks(INSERT/UPDATE/DELETE) |
| カスタムのキーと値のデータを保存する | netnode_kv(CRUD 全般、IDB に保持) |
| エンティティ検索(構造化) | grep スキルと grep WHERE pattern = '...' |
注意: パフォーマンスを許容範囲に保つため、命令テーブルと逆コンパイラーテーブルには必ず func_addr = X の制約を指定してください。
エラー処理
- Hex-Rays ライセンスがない場合: 逆コンパイラーテーブル(
pseudocode、ctree*、ctree_lvars)は空になるか、利用できません - 逆コンパイラーテーブルに制約がない場合: クエリは極端に遅くなります(すべての関数を逆コンパイルします)
- 無効なアドレス: 含まれる関数のテーブル検索では行が返されません。NULL 許容のスカラー結果が必要な場合は、スカラーサブクエリを使用してください
- 関数が見つからない場合: JOIN の結果が予想より少なくなることがあります