
Python コマンドライン Ghidra MCP
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/41597/82f9c5eb55db6134d47587275fce66c4ed32b86b5332f7e2d610fa0214070a7f.png" width=60% >
</p>
<p align="center">
<img align="center" alt="GitHub Workflow Status (with event)" src="https://img.shields.io/github/actions/workflow/status/clearbluejar/pyghidra-mcp/pytest-devcontainer-repo-all.yml?style=for-the-badge&label=pytest">
<img align="center" alt="PyPI - Downloads" src="https://img.shields.io/pypi/dm/pyghidra-mcp?color=yellow&label=PyPI%20downloads&style=for-the-badge">
<img align="center" src="https://img.shields.io/github/stars/clearbluejar/pyghidra-mcp?style=for-the-badge">
</p>
# PyGhidra-MCP - Ghidra Model Context Protocol サーバー
### 概要
**`pyghidra-mcp`** は、堅牢なソフトウェアリバースエンジニアリング(SRE)スイートである [Ghidra](https://ghidra-sre.org/) の完全な分析能力を、インテリジェントエージェントと LLM ベースのツール群の世界に持ち込むコマンドライン Model Context Protocol(MCP)サーバーです。
`pyghidra` と `jpype` を使用して Ghidra の [ProgramAPI](https://ghidra.re/ghidra_docs/api/ghidra/program/model/listing/Program.html) と [FlatProgramAPI](https://ghidra.re/ghidra_docs/api/ghidra/program/flatapi/FlatProgramAPI.html) を Python に橋渡しし、その機能を Model Context Protocol 経由で公開します。
MCP は、言語モデル、開発ツール(VS Code など)、自律エージェントが構造化されたコンテキストにアクセスし、ツールを呼び出し、インテリジェントに協働することを可能にする統一インターフェースです。MCP は、強力な分析ツールと LLM エコシステムをつなぐ架け橋と考えてください。
`pyghidra-mcp` を使えば、Ghidra はインテリジェントなバックエンドとなり、コンテキスト豊富なクエリに応答し、深いリバースエンジニアリングタスクを自動化し、AI 支援ワークフローに統合する準備が整います。
`pyghidra-mcp` は現在、2 つの動作モードをサポートしています:
- CLI 駆動の分析と自動化のための `headless` モード
- `--gui` モード。`pyghidra-mcp` を通じて Ghidra を起動し、実行中の GUI とライブなプログラム状態を共有します
> [!NOTE]
> このベータプロジェクトは活発に開発中です。フィードバック、バグ報告、機能リクエスト、コードをぜひお寄せください。
## また別の Ghidra MCP なのか?
はい、オリジナルの [ghidra-mcp](https://github.com/LaurieWired/GhidraMCP) は素晴らしいものです。しかし `pyghidra-mcp` は異なるアプローチを取っています:
- 🐍 **ヘッドレスファースト、GUI 対応** – 合理化された自動化のために完全に CLI 経由で実行するか、ライブな GUI ナビゲーションと編集が必要な場合は `--gui` で Ghidra を起動できます。
- 🔁 **自動化のために設計** – LLM、CI パイプライン、再現可能な動作を必要とするツール群との統合に最適です。
- ✅ **CI/CD フレンドリー** – クライアントとサーバーの両方のセッションに対して堅牢なユニットテストと統合テストを備えて構築されています。
- 🚀 **迅速な起動** – 非同期起動により、バイナリがバックグラウンドで分析されている間もサーバーはリクエストの処理を開始できます。最小限のセットアップで高速なコマンドライン起動をサポートします。
- 📦 **プロジェクト全体の分析** – Ghidra プロジェクト内のすべてのバイナリを並行してリバースエンジニアリングできます
- 🤖 **エージェント対応** – インテリジェントなエージェント駆動ワークフローと大規模なリバースエンジニアリング自動化のために構築されています。
- 🔍 セマンティックコード検索 – ベクトル埋め込み(ChromaDB 経由)を使用して、デコンパイルされた関数、コメント、シンボル全体にわたる高速でファジーな検索を可能にします—疑似 C の探索やエージェント駆動のトリアージに最適です。
このプロジェクトは、ローカル開発、ヘッドレス環境、テスト可能なワークフローに最適化された Python ファーストの体験を提供します。
## セットアップ図
### 各部分の接続方法
```mermaid
flowchart LR
subgraph Clients["Clients"]
Agent["MCP host / agent"]
Cli["pyghidra-mcp-cli"]
User["Ghidra user"]
end
subgraph Process["pyghidra-mcp process"]
Transport["streamable HTTP (recommended)<br/>stdio (local fallback)"]
Tools["MCP tools"]
Context["PyGhidra context"]
end
Project["Ghidra project<br/>.gpr / .rep"]
Artifacts["MCP artifacts<br/>ChromaDB + GZF cache"]
Gui["Ghidra GUI / CodeBrowser<br/>only with --gui"]
Agent -->|"HTTP (recommended)"| Transport
Cli -->|"HTTP only"| Transport
Transport --> Tools
Tools --> Context
Context --> Project
Context --> Artifacts
Context -.-> Gui
User -.-> Gui
Gui -.-> Project
```
### モードの選択
```mermaid
flowchart TD
Start["What do you need?"]
Start --> Headless["Agent or automation"]
Start --> GuiNeed["Live Ghidra GUI control"]
Start --> Terminal["Interactive terminal client"]
Headless --> Http["pyghidra-mcp<br/>--transport streamable-http"]
GuiNeed --> GuiMode["pyghidra-mcp --gui<br/>--transport streamable-http<br/>--project-path project.gpr"]
Terminal --> HttpServer["Start pyghidra-mcp<br/>--transport streamable-http"]
HttpServer --> CliMode["Run pyghidra-mcp-cli commands"]
```
- **Headless MCP**: `streamable-http` を使用します。Ghidra とそのプロジェクトを単一の長時間稼働サーバーとして維持し、MCP ホストと CLI クライアントの両方で動作します。
- **GUI モード**: `pyghidra-mcp` は Ghidra を起動し、プロジェクトを開き、同じ JVM 内で CodeBrowser を操作する追加ツールを公開します。
- **CLI クライアント**: `pyghidra-mcp-cli` は HTTP クライアントです。まず `streamable-http` サーバーを起動し、その後、実行中のサーバーに対してターミナルコマンドを発行します。
- **stdio**: HTTP エンドポイントに接続できない MCP ホスト専用にこれを保持します。
<details>
<summary>詳細なアーキテクチャとツールサーフェス</summary>
```mermaid
flowchart TD
subgraph Clients
Agent["LLM / MCP host"]
Cli["pyghidra-mcp-cli"]
Automation["scripts and CI"]
end
subgraph Transports
Stdio["stdio"]
Http["streamable-http"]
Sse["sse legacy"]
end
subgraph Server["pyghidra-mcp server"]
McpServer["MCPServer tool server"]
Context["PyGhidra context"]
Indexing["background analysis and Chroma indexing"]
subgraph Tools["MCP tools"]
Analysis["decompile, xrefs, bytes, callgraph"]
Search["symbols, strings, code"]
ProjectOps["import, delete, metadata, list binaries"]
Edits["rename function, rename variable, set type, set prototype, set comment"]
GuiOnly["GUI only: open program, goto, list open programs, set current program"]
end
end
subgraph GhidraRuntime["Ghidra runtime"]
PyGhidra["pyghidra"]
Jpype["JPype shared JVM"]
Project["Ghidra project"]
Programs["program databases"]
CodeBrowser["Ghidra GUI / CodeBrowser"]
end
Agent --> Http
Automation --> Http
Automation --> Sse
Cli --> Http
Stdio --> McpServer
Http --> McpServer
Sse --> McpServer
McpServer --> Context
Context --> PyGhidra
PyGhidra --> Jpype
Jpype --> Project
Project --> Programs
Context --> Indexing
Indexing --> Search
McpServer --> Tools
Tools --> Context
GuiOnly -.-> CodeBrowser
Context -.-> CodeBrowser
```
</details>
## 目次
- [PyGhidra-MCP - Ghidra Model Context Protocol サーバー](#pyghidra-mcp---ghidra-model-context-protocol-server)
- [概要](#overview)
- [また別の Ghidra MCP?](#yet-another-ghidra-mcp)
- [セットアップ図](#setup-diagrams)
- [各部分の接続方法](#how-the-pieces-connect)
- [モードの選択](#choosing-a-mode)
- [目次](#contents)
- [はじめに](#getting-started)
- [エージェント向けに最適化](#optimized-for-agents)
- [CLI クライアント](#cli-client)
- [インストール](#installation)
- [CLI でのクイックスタート](#quick-start-with-cli)
- [プロジェクトの作成、管理、および既存プロジェクトのオープン](#project-creation-management-and-opening-existing-projects)
- [新規プロジェクトの作成](#creating-new-projects)
- [自己完結型プロジェクト構造](#self-contained-project-structure)
- [基本的なプロジェクト作成](#basic-project-creation)
- [カスタムプロジェクト作成](#custom-project-creation)
- [複数の関連プロジェクトの作成](#creating-multiple-related-projects)
- [既存の Ghidra プロジェクトを開く](#opening-existing-ghidra-projects)
- [.gpr ファイルによるオープン](#opening-by-gpr-file)
- [GUI モード](#gui-mode)
- [起動時のデフォルトと大規模プロジェクト](#startup-defaults-and-large-projects)
- [開発](#development)
- [セットアップ](#setup)
- [テストと品質](#testing-and-quality)
- [API](#api)
- [ツール](#tools)
- [バッチ操作](#batch-operations)
- [読み取り / 解析ツール](#read--analysis-tools)
- [プロジェクト操作](#project-operations)
- [編集 / 変更ツール](#edit--mutation-tools)
- [GUI 制御ツール (`--gui` のみ)](#gui-control-tools---gui-only)
- [使用方法](#usage)
- [Docker でのバイナリのマッピング](#mapping-binaries-with-docker)
- [Streamable HTTP](#streamable-http)
- [Python](#python)
- [Docker](#docker)
- [Claude Code](#claude-code)
- [Codex](#codex)
- [標準入力/出力 (stdio)](#standard-inputoutput-stdio)
- [Python](#python-1)
- [Docker](#docker-1)
- [OpenWeb-UI と MCPO での使用](#using-with-openweb-ui-and-mcpo)
- [`uvx` を使用する場合](#with-uvx)
- [Docker を使用する場合](#docker-2)
- [Server-sent events (SSE)](#server-sent-events-sse)
- [Python](#python-2)
- [Docker](#docker-3)
- [インスピレーション](#inspiration)
- [コントリビューション、コミュニティ、ソースからの実行](#contributing-community-and-running-from-source)
- [コントリビューターワークフロー](#contributor-workflow)
## はじめに
[Python パッケージ](https://pypi.org/p/pyghidra-mcp)と [`uv`](https://docs.astral.sh/uv/guides/tools/) を使用して、永続的な Streamable HTTP サーバーを起動します:
```bash
uvx pyghidra-mcp \
--transport streamable-http \
--project-path /absolute/path/to/ghidra-projects \
/absolute/path/to/binary
```
サーバーは `http://127.0.0.1:8000/mcp` で利用可能になります。実行したままにして、MCP クライアントがその URL を使用するように設定してください。以下の [Claude Code](#claude-code) と [Codex](#codex) の例に、期待される設定を示します。
MCP からライブの Ghidra GUI を起動して操作するには、`streamable-http` とともに `--gui` を使用します:
```bash
uvx pyghidra-mcp \
--gui \
--transport streamable-http \
--host 127.0.0.1 \
--port 8000 \
--project-path /absolute/path/to/ghidra-projects \
--project-name my_project
```
> [!IMPORTANT]
> `--gui` は `pyghidra-mcp` を介して Ghidra を起動します。既に実行中の外部 Ghidra インスタンスにはアタッチしません。
または、[Docker コンテナ](https://ghcr.io/clearbluejar/pyghidra-mcp)として実行します:
```bash
docker run --rm -p 8000:8000 ghcr.io/clearbluejar/pyghidra-mcp
```
## エージェント向けに最適化
`pyghidra-mcp` は MCP サーフェスを意図的に狭く保ち、エージェントクライアントがツールの検出と引数の選択に費やすトークンを削減します。
- **短いツール説明**: MCP ツールの docstring はコンパクトに保たれるため、MCPServer のツールスキーマは小さく、モデルへ送信するコストが低く抑えられます。
- **コンテキストの規律**: ツールはデフォルトでプログラム全体のコンテキストをダンプするのではなく、焦点を絞った構造化データを返します。デコンパイル、シンボル検索、クロスリファレンスの結果は、1 つの大きなレスポンスではなく反復的な分析を支援する形に整えられています。
- **GUI ツールは必要なときのみ**: `open_program_in_gui`、`list_open_programs`、`set_current_program`、`goto` などの GUI 専用コントロールは、サーバーが `--gui` 付きで起動された場合にのみ公開されます。
- **CLI はオプション**: MCP が好みのインターフェースでない場合、`pyghidra-mcp-cli` は HTTP 経由の直接的なコマンドラインクライアントを提供し、一般的な編集および分析ワークフロー向けにグループ化されたコマンドを備えています。
これにより、デフォルトのサーバーは LLM エージェント、IDE 統合、自動化で使用可能なまま、ヘッドレスセッションで不要なツールサーフェスや GUI 専用コントロールを公開しません。
## CLI クライアント
よりインタラクティブなコマンドライン体験には、別パッケージの **pyghidra-mcp-cli** を使用できます。これは実行中の pyghidra-mcp サーバーと対話するためのユーザーフレンドリーなインターフェースを提供します。
### インストール
[`uv`](https://docs.astral.sh/uv/) を使用して CLI クライアントをインストールします(推奨):
```bash
uvx pyghidra-mcp-cli
```
pip でインストールする場合:
```bash
pip install pyghidra-mcp-cli
```
### CLI でのクイックスタート
1. **サーバーを起動する**(1つのターミナルで):
```bash
pyghidra-mcp --transport streamable-http /bin/ls
```
2. **CLI を使用する**(別のターミナルで):
```bash
# List available binaries
pyghidra-mcp-cli list binaries
# Decompile a function
pyghidra-mcp-cli decompile --binary ls main
# Decompile with callees, referenced strings, and cross-references
pyghidra-mcp-cli decompile --binary ls main --callees --strings --xrefs
# Search for symbols (supports regex patterns)
pyghidra-mcp-cli search symbols --binary ls printf -l 10
```
> [!NOTE]
> CLIは、コマンドごとに新しいGhidraプロセスを起動する際の10〜60秒の起動オーバーヘッドを避けるため、HTTP経由でpyghidra-mcpに接続します。完全なドキュメントについては、[CLI README](https://github.com/clearbluejar/pyghidra-mcp/blob/main/cli/README.md)を参照してください。
## プロジェクトの作成、管理、および既存プロジェクトのオープン
### 新しいプロジェクトの作成
ワークフローに応じて、いくつかの方法で新しいプロジェクトを作成できます:
#### 自己完結型プロジェクト構造
`pyghidra-mcp`は、各プロジェクトが独自のGhidraプロジェクトとpyghidra-mcpアーティファクトを持つ**自己完結型プロジェクト構造**を作成します。これにより、完全な分離と容易なプロジェクト管理が保証されます。
#### 基本的なプロジェクト作成
```bash
# Create a new project with default settings
pyghidra-mcp
# Creates:
$ tree pyghidra_mcp_projects/
pyghidra_mcp_projects/
├── my_project.gpr
├── my_project-pyghidra-mcp
│ ├── chromadb
│ └── gzfs
└── my_project.rep
```
#### カスタムプロジェクトの作成
```bash
# Create project with custom name and location
pyghidra-mcp --project-path ~/analysis/malware_study --project-name malware_analysis
$ tree ~/analysis/
/home/vscode/analysis/
└── malware_study
├── malware_analysis.gpr
├── malware_analysis-pyghidra-mcp
│ ├── chromadb
│ └── gzfs
└── malware_analysis.rep
```
#### 複数の関連プロジェクトの作成
```bash
# Create separate projects for different analysis focuses
mkdir ~/reverse_engineering_workspace
# Project for suspicious binaries
pyghidra-mcp --project-path ~/reverse_engineering_workspace/suspicious_binaries --project-name suspicious_analysis
# Project for packed malware
pyghidra-mcp --project-path ~/reverse_engineering_workspace/packed_malware --project-name packed_analysis
```
### 既存のGhidraプロジェクトを開く
既存のGhidraプロジェクト(`.gpr`ファイル)がある場合、`pyghidra-mcp`で直接開くことができます:
#### .gprファイルで開く
```bash
# Open existing Ghidra project (project name derived from filename)
pyghidra-mcp --project-path ~/existing/ghidra/my_research.gpr
# Result: ~/existing/ghidra/my_research-pyghidra-mcp/
# └── chromadb/, gzfs/ (pyghidra-mcp additions)
```
### GUIモード
Ghidraが表示しているのと同じライブプログラムオブジェクトに対してMCPアクションを操作したい場合は、GUIモードを使用します。
- `--gui` には `--transport streamable-http`(またはエイリアスとして `--transport http`)が必要です
- `--project-path` にはプロジェクトディレクトリと `--project-name` の組み合わせ、または既存の `.gpr` ファイルを指定できます。存在しないプロジェクトは自動的に作成されます。
- Ghidraは `pyghidra-mcp` によって起動され、GUIとMCPのトランザクションが同じJVM内に保持されます
- GUI専用ツールは `--gui` を付けて実行した場合にのみ公開されます
例:
```bash
pyghidra-mcp \
--gui \
--transport streamable-http \
--project-path /absolute/path/to/my_research.gpr
```
GUI モードは、次のような場合に適した選択肢です:
- CodeBrowser でプログラムを開いたり切り替えたりする
- リスティングを関数やアドレスへナビゲートする
- 関数の名前を変更したりコメントを追加したりして、その変更を Ghidra で即座に確認する
### 起動時のデフォルトと大規模プロジェクト
`pyghidra-mcp` はデフォルトでは `--wait-for-analysis` を必要としません。サーバーは、解析と MCP 側のインデックス作成がバックグラウンドで継続している間に起動できます。
これは大規模プロジェクトにとって重要です:
- 多数のバイナリを含むプロジェクトを起動しても、サーバーの起動をブロックする必要はありません
- リクエストを処理する前に完全に解析されたプロジェクトが必要な場合は、`--wait-for-analysis` を利用できます
- 大規模な既存プロジェクトでは、解析とインデックス作成の準備完了がバイナリごとに異なることを想定してください
現在の制限:
- Ghidra の解析状態と MCP のインデックス作成状態は別々です
- バイナリが Ghidra で完全に解析されていても、`search_strings` やセマンティックな `search_code` が MCP 側のインデックス作成をまだ待っていることがあります
- これは、より大規模な既存プロジェクトを開くときに顕著になります
実際には:
- インデックス作成を多用する検索機能が追いつく間も、バイナリの逆コンパイル、ナビゲーション、名前変更、コメントは引き続き機能します
- 起動レイテンシが即時の検索準備完了よりも重要な場合は、デフォルトの `--no-wait-for-analysis` を維持してください
- 即時の準備完了が起動時間よりも重要な場合は、`--wait-for-analysis` を使用してください
## 開発
このプロジェクトでは、開発とテストを効率化するために `Makefile` を使用しています。リンティングとフォーマットには `ruff` を使用し、コード品質を確保するために `pre-commit` フックを使用しています。
### セットアップ
1. **`uv` のインストール**: `uv` がインストールされていない場合は、pip を使用してインストールできます:
```bash
pip install uv
```
または、公式の `uv` インストールガイドに従ってください:[https://docs.astral.sh/uv/install/](https://docs.astral.sh/uv/install/)
2. **仮想環境の作成と依存関係のインストール**:
```bash
make dev-setup
source ./.venv/bin/activate
```
3. **Ghidra 環境変数の設定**: Ghidra をダウンロードしてインストールし、`GHIDRA_INSTALL_DIR` 環境変数を Ghidra のインストールディレクトリに設定します。
```bash
# For Linux / Mac
export GHIDRA_INSTALL_DIR="/path/to/ghidra/"
# For Windows PowerShell
[System.Environment]:https://raw.githubusercontent.com/clearbluejar/pyghidra-mcp/main/:SetEnvironmentVariable(%27GHIDRA_INSTALL_DIR%27,%27C:%5Cpath%5Cto%5Cghidra%27)
```
### テストと品質
`Makefile` は、テストとコード品質のためのいくつかのターゲットを提供します:
- `make run`: MCP サーバーを実行します。
- `make test`: 完全なテストスイート(ユニットテストと統合テスト)を実行します。
- `make test-unit`: ユニットテストを実行します。
- `make test-integration`: 統合テストを実行します。
- `make test-integration-fast`: pre-commit で使用される軽量な統合スモークテストを実行します。
- `make test-integration-gui`: GUI 統合テストを実行します。動作する Ghidra のインストールと GUI サポートが必要です。
- `make lint`: `ruff` でコードスタイルをチェックします。
- `make format`: `ruff` でコードをフォーマットします。
- `make typecheck`: `ruff` で軽量な静的チェックを実行します。
- `make check`: すべての品質チェックを実行します。
- `make dev`: 開発ワークフロー(フォーマットとチェック)を実行します。
- `make build`: 配布パッケージをビルドします。
- `make clean`: ビルド成果物とキャッシュをクリーンアップします。
推奨される分担:
- pre-commit: `ruff`、`pyright`、ユニットテスト、および 1 つの軽量な統合スモークテスト
- GitHub Actions: 完全な Linux ヘッドレス統合カバレッジ、`Xvfb` 下での Linux GUI、CLI カバレッジ、および現在の macOS スモークテスト
- スケジュールされた CI: 古い macOS / Ghidra の互換性カバレッジ
- ローカル/手動: より負荷の高い環境固有の GUI デバッグとリリースの健全性チェック
## API
### ツール
LLM がアクションを実行し、決定論的な計算を行い、外部サービスと対話できるようにします。
#### バッチ操作
`decompile_function` と `list_xrefs` は、単一のターゲットまたはターゲットのリストを受け入れ、呼び出しチェーンや複数のシンボルを一度に分析する際のラウンドトリップを削減します。
```jsonc
// Decompile three functions in one call, with callees and xrefs attached
{
"binary_name": "firmware.bin",
"name_or_address": ["main", "init_hardware", "0x08001234"],
"include_callees": true,
"include_xrefs": true
}
// Get cross-references for multiple symbols at once
{
"binary_name": "firmware.bin",
"name_or_address": ["malloc", "free", "realloc"]
}
```
項目ごとのエラーはインラインで返されます(他のターゲットは引き続き成功します):
```jsonc
[
{"name": "main", "code": "void main() { ... }", "callees": ["init_hardware"], "xrefs": [...]},
{"name": "0xdeadbeef", "code": "", "error": "Function or symbol '0xdeadbeef' not found."}
]
```
#### 読み取り / 解析ツール
- `search_code(binary_name: str, query: str, limit: int = 5, offset: int = 0, search_mode: str = "semantic", include_full_code: bool = True, preview_length: int = 500, similarity_threshold: float = 0.0)`: セマンティックベクトル検索またはリテラルマッチングを使用して、デコンパイルされた疑似Cコードを検索します。
- `list_xrefs(binary_name: str, name_or_address: str | list[str])`: 関数、シンボル、またはアドレスへのクロスリファレンスを一覧表示します。単一のターゲットまたはバッチ検索用のリストを受け付けます。
- `gen_callgraph(binary_name: str, function_name: str, direction: str = "calling", display_type: str = "flow", condense_threshold: int = 50, top_layers: int = 3, bottom_layers: int = 3, max_run_time: int = 120)`: 指定された関数のMermaidJSコールグラフを生成します。「calling」(ターゲットが呼び出す関数)と「called」(ターゲットを呼び出す関数)の両方向をサポートし、複数の可視化タイプを備えています。
- `decompile_function(binary_name: str, name_or_address: str | list[str], include_callees: bool = False, include_strings: bool = False, include_xrefs: bool = False, timeout_sec: int = 30)`: 名前またはアドレスで関数をデコンパイルします。単一のターゲットまたはバッチデコンパイル用のリストを受け付けます。リッチレスポンスフラグは、各結果に呼び出し先、文字列、および/またはクロスリファレンスを付加します。`timeout_sec` はターゲットごとに適用され、各デコンパイル試行を個別に制限します。
- `list_exports(binary_name: str, query: str = ".*", offset: int = 0, limit: int = 25)`: 指定されたバイナリからエクスポートされたすべての関数とシンボルを一覧表示します(クエリには正規表現をサポート)。
- `list_imports(binary_name: str, query: str = ".*", offset: int = 0, limit: int = 25)`: 指定されたバイナリのインポートされたすべての関数とシンボルを一覧表示します(クエリには正規表現をサポート)。
- `read_bytes(binary_name: str, address: str, size: int = 32)`: 指定されたアドレスのメモリから生のバイトを読み取ります。16進アドレスには `0x` プレフィックスを含めても省略してもかまいません。
- `search_strings(binary_name: str, query: str, limit: int = 100)`: バイナリ内の文字列を検索します。
- `search_symbols_by_name(binary_name: str, query: str, functions_only: bool = False, offset: int = 0, limit: int = 25)`: 名前でバイナリ内のシンボルを検索します。大文字と小文字を区別しないマッチングで正規表現パターン(例: `^main$`、`func.*one`)または単純な部分文字列クエリをサポートします。ラベル、変数、その他の非関数シンボルを除外するには `functions_only=True` を設定します。
#### プロジェクト操作
- `import_binary(binary_path: str)`: 指定されたパスから現在のGhidraプロジェクトにバイナリをインポートします。パスがディレクトリの場合、サポートされているすべてのバイナリファイルを再帰的にスキャンしてインポートし、Ghidraプロジェクト内でディレクトリ構造を保持します。
- `list_project_binaries()`: 現在のGhidraプロジェクト内のバイナリを一覧表示します。GUIモードでは、CodeBrowserで現在開かれていない場合でも、ディスク上に存在するプロジェクトバイナリが含まれます。
- `list_project_binary_metadata(binary_name: str)`: アーキテクチャ、コンパイラ、実行可能形式、解析メトリクス、ファイルハッシュなど、特定のバイナリの詳細なメタデータを取得します。
- `delete_project_binary(binary_name: str)`: Ghidraプロジェクトからバイナリ(プログラム)を削除します。
#### 編集 / 変更ツール
- `rename_function(binary_name: str, name_or_address: str, new_name: str)`: 名前またはアドレスで関数の名前を変更します。GUIモードでは、これはライブGhidraトランザクションとして実行され、開いているプログラムを更新します。
- `rename_variable(binary_name: str, function_name_or_address: str, variable_name: str, new_name: str)`: 特定の関数内で完全一致する名前で関数パラメータまたはローカル変数の名前を変更します。その関数内で名前が存在しないか曖昧な場合、ツールは推測せずにエラーを返します。GUIモードでは、これはライブGhidraトランザクションとして実行され、開いているプログラムを更新します。
- `set_variable_type(binary_name: str, function_name_or_address: str, variable_name: str, type_name: str)`: 特定の関数内で完全一致する名前で関数パラメータまたはローカル変数のデータ型を設定します。その関数内で名前が存在しないか曖昧な場合、ツールは推測せずにエラーを返します。`type_name` は、プログラムのデータ型マネージャに対してGhidraのデータ型パーサーを使用して解析されます。
- `set_function_prototype(binary_name: str, function_name_or_address: str, prototype: str)`: 完全なシグネチャ文字列から関数プロトタイプを設定します。ツールは常にプロトタイプをGhidraのネイティブシグネチャパーサーに通し、プロトタイプが無効な場合は基になるパーサーまたは適用エラーを返します。
- `set_comment(binary_name: str, target: str, comment: str, comment_type: str)`: 関数/デコンパイラコメントまたはリスティングコメントを設定します。リスティングコメントのターゲットは、アドレス、シンボル、または関数にすることができます。サポートされている `comment_type` の値は `decompiler`、`plate`、`pre`、`eol`、`post`、`repeatable` です。
#### GUI制御ツール(`--gui` のみ)
これらのツールは、`pyghidra-mcp` が `--gui` 付きで起動された場合にのみ利用可能で、プロジェクトデータを直接変更するのではなく、GUIが表示している内容を制御します:
- `list_open_programs()`: Ghidra GUIで現在開いているプログラムを一覧表示します。
- `open_program_in_gui(binary_name: str, new_window: bool = True)`: CodeBrowserでプロジェクトバイナリを開きます。デフォルトでは新しいCodeBrowserウィンドウを開きます。可能な場合は表示されているCodeBrowserを再利用するには `new_window=false` を設定します。
- `set_current_program(binary_name: str)`: 開いているプログラムをプライマリGUIツールコンテキストのアクティブ/カレントプログラムにします。
- `goto(binary_name: str, target: str, target_type: str)`: Ghidra GUIをアドレスまたは関数にナビゲートします。`target_type` は `address` または `function` でなければなりません。
## 使用方法
---
[Read more](https://github.com/clearbluejar/pyghidra-mcp)