TL;DR

libghidra là typed SDK mới do Elias Bachaalany (0xeb / @allthingsida) phát hành, cho phép bạn tự động hoá Ghidra từ C++, Python và Rust. Cùng một bề mặt IClient gồm 88 method hoạt động trên cả ba ngôn ngữ, với hai backend: HttpClient nói chuyện với Ghidra JVM đang chạy, và LocalClient là decompiler engine C++ chạy offline không cần Java. Mục tiêu chính: phục vụ AI agent reverse-engineer — coi Ghidra như hạ tầng, không chỉ là GUI.

What's new

Hệ sinh thái Ghidra lâu nay gắn chặt với JVM: muốn automation bạn viết Java hoặc Jython, hoặc gọi headless analyzer. libghidra tách bề mặt API ra khỏi runtime đó. Nó cung cấp một interface duy nhất, được typed đầy đủ, với các khả năng cốt lõi mà người làm RE thực sự cần:

  • Decompile function, lấy pseudocode
  • Rename function, symbol; thêm comment, annotation
  • Inspect symbol, type, cross-reference (xrefs)
  • Query memory, disassembly, listing
  • Quản lý vòng đời project: open, save, close, reopen

Mọi call đều trả về StatusOr<T>, nghĩa là bạn nhận được kết quả typed hoặc status lỗi có cấu trúc — không phải chuỗi hay exception bất định.

Why it matters

Đây không phải một plugin LLM nữa. Đây là tầng SDK bên dưới mọi plugin LLM. Các dự án như GhidraMCP, GhidrAssist hay OGhidra đang bọc Ghidra thành công cụ MCP cho chatbot; libghidra thì mở ra bề mặt fine-grained để bạn tự xây agent, pipeline hoặc tooling native trên đó — không bị khoá vào một framework cụ thể nào. Với AI agent coding, việc có API typed, deterministic quan trọng hơn nhiều so với chat wrapper: agent cần biết chính xác input/output schema để lập kế hoạch nhiều bước.

Technical facts

Thuộc tínhChi tiết
Version0.0.1 alpha
LicenseMozilla Public License 2.0
Interface1 IClient với 88 method, trả StatusOr<T>
Backend AHttpClient → Ghidra JVM + extension LibGhidraHost (mặc định http://127.0.0.1:18080)
Backend BLocalClient — decompiler C++ offline, không cần JVM
Ghidra tối thiểu12.0.4+
Build toolJDK 21 + Gradle (extension), C++20 + CMake 3.20+ (C++ SDK)

Ba SDK cùng hình dạng API, nhưng mỗi bên có tinh chỉnh riêng: Python có cả biến thể sync lẫn async kèm CLI, Rust có helper phân trang, C++ có thêm LocalClient cho case không muốn dựng JVM.

Code snippet cho cảm giác

Python:

import libghidra as ghidra
client = ghidra.connect("http://127.0.0.1:18080")
funcs = client.list_functions()

Rust:

let client = ghidra::connect("http://127.0.0.1:18080");
let funcs = client.list_functions(0, u64::MAX, 10, 0)?;

C++:

auto client = ghidra::connect("http://127.0.0.1:18080");
auto funcs = client->ListFunctions(0, UINT64_MAX, 10, 0);

Comparison

Cách tiếp cậnNgôn ngữRuntimeMức trừu tượng
Ghidra scripting gốcJava / JythonCần JVMThấp — gắn chặt GUI/headless
GhidraMCP / GhidrAssistPrompt LLMCần JVM + MCP serverCoarse-grained, hướng chat
libghidra HttpClientC++ / Python / RustCần JVM (Ghidra chạy)Typed fine-grained, 88 method
libghidra LocalClientC++Không cần JVMOffline decompile, subset API

Nói cách khác: nếu bạn đang tự build AI agent, pipeline CI cho binary analysis, hoặc nhúng decompiler vào một tool native, libghidra là tầng nên với tới trước khi đụng Java.

Use cases

  • AI reverse-engineering agent — target chính. Agent gọi typed method thay vì prompt GUI, dễ planning nhiều bước.
  • Batch pipeline — decompile hàng loạt binary, diff symbol giữa các version, extract xrefs để build knowledge graph.
  • Native tooling — LocalClient cho phép nhúng decompiler vào công cụ C++/Rust mà không cần đóng gói JVM.
  • Webapp phân tích — query program DB từ backend Python/Rust, cache kết quả, serve qua API riêng.

Limitations & pricing

  • API và model còn evolve — chưa có cam kết stability cho v0.0.1 alpha.
  • C++ API hiện lộ trực tiếp protobuf header, chưa có lớp abstraction sạch.
  • Mutate biến local cần local_id canonical — lệch một chút là lỗi.
  • Validation tập trung vào live-host và headless; các đường đi khác ít được thử.
  • Miễn phí, open source theo MPL-2.0; cần cài Ghidra 12.0.4+ riêng.

What's next

Tweet khởi đầu đánh dấu 1/n nên sẽ còn các post tiếp theo giải thích kiến trúc và ví dụ. Kỳ vọng roadmap gần: ổn định API, mở rộng bề mặt LocalClient, bọc lại protobuf, bổ sung ví dụ cho agent framework phổ biến. Với người đang xây AI RE agent, đây là thời điểm tốt để thử và góp issue lúc SDK còn mềm.

Nguồn: 0xeb/libghidra, @allthingsida trên X.