mcpField
C
connect

connect

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

connect について

connectは、IDAデータベースまたは生バイナリを開いて解析セッションを確立するidasqlスキルです。起動手順、スキーマ確認、実行モード、エージェント向けのクエリと変更の規約を説明します。

主な機能

  1. 01IDAデータベースまたは生バイナリを開く
  2. 02データベースの初期情報を確認
  3. 03複雑なクエリの前にスキーマを調査
  4. 04HTTPまたはMCPサーバーモードを起動
  5. 05安全なクエリと変更の手順を確認

活用シーン

  1. 01生の実行ファイルから解析を開始
  2. 02旧形式データベースのアップグレード後に再接続
  3. 03データベースのサーバー自動起動を設定
  4. 04解析クエリに適したスキルを選択

MCP 対応

idasqlのHTTPおよびMCPサーバーモードと、データベース単位の自動起動設定を説明します。また、MCPのクエリインターフェースとリクエスト上の制約を扱います。

インストール

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

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

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

同梱ファイル

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

agents/
openai.yaml
references/
cli-reference.md
optimization-checklist.md
schema-catalog.md
server-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 を参照してください。


クイックスタートの注意事項

  • 必ず -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、MCP idasql_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>);
  • 最初に SELECT * FROM binary; を実行して概要を把握してください。

スキーマカタログ

標準的なカラム構成とオーナースキルの対応表は references/schema-catalog.md にあります。pragma_table_list と pragma_table_xinfo をもとにしています。あまり一般的でない項目のカラム名を想定する前に参照してください。


セッション開始時の契約

詳細な分析に入る前に、次の起動フローを必ずこの順序で実行してください。

  1. データベースに接続します(-s、-i、または --http)。-s では既存の IDB (.idb/.i64)または生のバイナリ(.exe/.dll/ファームウェアなど)を指定できます。idat で 事前に IDB をビルドしてはいけません。idasql -s raw.exe にビルドさせてください。 レガシー .idb がアップグレードされ、status:"upgraded" が返された場合は、 オリエンテーションを実行する前に、JSON の reopen_with パスを使って再起動してください。
  2. オリエンテーションのクエリを実行します。
SELECT * FROM binary;
  1. 主要なエンティティが存在することを確認します。
SELECT COUNT(*) AS funcs FROM funcs;
SELECT COUNT(*) AS xrefs FROM xrefs;
SELECT COUNT(*) AS strings FROM strings;
  1. 複雑な SQL を作成する前に、対象の領域のスキーマを確認します。
PRAGMA table_xinfo(funcs);
PRAGMA table_xinfo(xrefs);
  1. 以下のルーティングマトリックスを使って、ドメインスキルに振り分けます。

エージェント共通の契約

これらの契約はすべての idasql スキルに適用され、共通のエージェント動作モデルとして扱う必要があります。

先に読み取る契約
  • 書き込み(INSERT/UPDATE/DELETE)の前に、現在の状態を読み取ります(SELECT)。
  • 安定した識別子(addr、func_addr、idx、label_num)を使って、対象を正確に確認します。
推測禁止の契約
  • 使用頻度の低い領域のカラムや型を推測してはいけません。
  • 不確かなクエリを実行する前に、.schema または PRAGMA table_xinfo(...) でスキーマを確認します。
必須の変更ループ
  1. 現在の状態を読み取ります。
  2. 変更を適用します。
  3. 必要に応じて更新します(逆コンパイラの領域では decompile(..., 1) を実行します)。
  4. 再度読み取り、期待どおりの変更が行われたことを確認します。
パフォーマンスの契約
  • コストの高い領域(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 を読み取ります。)

スキルルーティングマトリックス(意図 -> スキル)

初期ルーティングには、以下の決定的なマッピングを使用します。

ユーザーの意図主なスキル一般的な最初のクエリ
「このバイナリは何をするのか?」/トリアージanalysisSELECT * FROM entries;
逆アセンブル、セグメント、命令disassemblySELECT * FROM funcs LIMIT 20;
関数/型のフォルダー、レビュー用バケット、フォルダーのライフサイクルannotations / typesSELECT addr, name, folder_path FROM funcs WHERE folder_path LIKE 'idasql/%';
xref/呼び出し元/呼び出し先/インポート依存関係xrefsSELECT * FROM xrefs WHERE to_addr = ...;
名前パターンで関数/型/ラベル/メンバーを検索grepSELECT name, kind, addr FROM grep WHERE pattern = 'main' LIMIT 20;
文字列/バイト/パターン検索dataSELECT * FROM strings LIMIT 20;
デコンパイル/疑似コード/ctree/lvarsdecompilerSELECT decompile(0x...);
コメント/名前変更/型の再指定/ブックマークannotations更新前に対象行に対して SELECT ... を実行
型の作成/構造体/列挙型/メンバーの作業typesSELECT * FROM types LIMIT 20;
ブレークポイント/パッチ適用debuggerSELECT * FROM breakpoints;
永続的なキー/値メモstorageSELECT * FROM netnode_kv LIMIT 20;
SQL 関数の検索/シグネチャの確認functionsSELECT * FROM pragma_function_list;
ランタイム設定/タイムアウト/キュー設定の列挙connectSELECT * FROM runtime_settings;(読み取り専用。変更するには PRAGMA idasql.<key> = <value> を使用)
ライブ IDA UI コンテキストに関する質問ui-contextSELECT get_ui_context_json();(利用可能な場合)
SQL の対象範囲にない、IDA SDK のみで実現できるロジックidapythonPRAGMA idasql.enable_idapython = 1; SELECT idapython_snippet('print(...)');
再帰的なソース/構造の復元re-source関数から開始して、再帰的に調査/引き継ぎ

プロンプトが複数の領域にまたがる場合は、次の順序で実行します。

  1. connect で概要を把握
  2. 主な領域のスキル
  3. 情報を補完する関連スキル(例:xrefs + decompiler + annotations)

スキル横断の実行手順

手順:未知のバイナリのトリアージ -> 疑わしい関数の詳細調査 -> 注釈付け
  1. analysis:インポート/文字列/呼び出しパターンから候補を特定します。
  2. xrefs/disassembly:呼び出しグラフと呼び出し箇所をマッピングします。
  3. decompiler:ロジックと変数の意味を調査します。
  4. annotations:変更ループを使用してコメント/名前変更/型を適用します。
手順:文字列 IOC -> 参照グラフ -> パッチ適用
  1. data:候補となる文字列とアドレスを特定します。
  2. xrefs:呼び出し元関数への参照をマッピングします。
  3. debugger または annotations:特定の箇所にパッチを適用するか、注釈を付けます。
手順:疑似コードからの型の復元
  1. decompiler:lvars、呼び出し引数、ctree のパターンを調査します。
  2. types:構造体/列挙型を作成または調整し、宣言を適用します。
  3. 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 を実行すると要約が先頭に表示されます。

キー型説明
summarystringデータベースの1行要約(最初の行)
tool_namestring常に idasql
tool_versionstringIDASQL のビルドバージョン(正規名)
idasql_versionstringIDASQL のビルドバージョン(旧名の重複項目)
processorstringプロセッサー/モジュール名
filetypestringローダーのファイル形式の説明(例:PE、ELF)
image_basehexイメージベースアドレス
entry_pointhexエントリー/開始アドレス(以前の start_addr 列)
min_addrhexデータベース内の最小アドレス
max_addrhexデータベース内の最大アドレス
is_64bitbooltrue/false
bitsintアプリケーションのビット数:16、32、または64
endiannessstringlittle または big
filenamestring入力ファイル名のみ(パスなし)
entry_namestringエントリーシンボル名(判明している場合)
funcs_countint検出された関数の数
segments_countintセグメント数
names_countint名前付きアドレスの数
strings_countint現在の IDA 文字列リストの件数
input_file_pathstringIDB に記録された元の入力ファイルパス
idb_pathstringディスク上の IDB/I64 のパス(移動されている場合は異なることがあります)
md5string入力ファイルの小文字16進数 MD5(利用できない場合は空)
sha256string入力ファイルの小文字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 を使用する最適化フィルターがあります。

テーブル最適化フィルターフィルターなし
instructionsfunc_addr = XO(全命令数) - 低速
blocksfunc_addr = XO(全ブロック数)
xrefsto_addr = X または from_addr = XO(全 xrefs 数)
pseudocodefunc_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 の結果が予想より少なくなることがあります

コメント