I craft unique cereal names, stories, and ridiculously cute Cereal Baby images.

ghidra-mcp-zig
A Ghidra plugin that provides a bridge between Ghidra and a Zig-based MCP server for enhanced program analysis capabilities.
3 years
Works with Finder
1
Github Watches
0
Github Forks
4
Github Stars
Ghidra MCP Zig Plugin
A Ghidra plugin that provides a bridge between Ghidra and a Zig-based MCP server for enhanced program analysis capabilities.
Features
- JNI-based communication between Ghidra and Zig
- Function decompilation and renaming
- Data symbol management
- Import/Export listing
- MCP server integration
- Comprehensive test suite
- Modern build system with Zig
- Efficient memory management
- Type-safe JNI bridge implementation
- Go client library for easy integration
Prerequisites
- Zig (version 0.13.0 or later)
- Ghidra (version 11.3.1 or later)
- Java Development Kit (JDK) 17 or later
- Go (version 1.22.4 or later)
- Gradle (version 8.13 or later)
- Make
Project Structure
ghidra-mcp-zig/
├── src/
│ ├── plugin/
│ │ ├── jni/
│ │ │ └── bridge.zig # JNI interface implementation
│ │ ├── analysis.zig # Program analysis logic
│ │ └── plugin.zig # Plugin initialization
│ └── server/
│ └── main.zig # MCP server implementation
├── java/ # Ghidra plugin Java code
│ ├── build.gradle # Gradle build configuration
│ ├── gradlew # Gradle wrapper script
│ └── src/ # Java source files
├── pkg/
│ └── mcp/
│ └── client/ # Go MCP client library
│ ├── client.go # Client implementation
│ └── client_test.go # Client tests
├── build.zig # Build configuration
├── build.zig.zon # Dependencies configuration
├── go.mod # Go module definition
└── Makefile # Build automation
Dependencies
- zig-jni (v0.0.9) - JNI bindings for Zig
Building
-
Clone the repository:
git clone https://github.com/yourusername/ghidra-mcp-zig.git cd ghidra-mcp-zig
-
Create a
.env
file with the following variables:GHIDRA_PATH=/path/to/ghidra_11.3.1_PUBLIC/Ghidra/Features/Base/lib/Base.jar JAVA_HOME=/path/to/your/jdk
-
Build the project:
# Build everything make all # Or build specific components make build-server # Build the MCP server make build-plugin # Build the Ghidra plugin
-
Run the server:
make run-server
Build Targets
Target | Description | Example Usage |
---|---|---|
all |
Build all components | make all |
build-server |
Build MCP server | make build-server |
build-plugin |
Build Ghidra plugin | make build-plugin |
clean |
Clean all artifacts | make clean |
clean-server |
Clean server artifacts | make clean-server |
clean-plugin |
Clean plugin artifacts | make clean-plugin |
Run Targets
Target | Description | Example Usage |
---|---|---|
run-server |
Start MCP server | make run-server |
run-plugin |
Start Ghidra plugin | make run-plugin |
Test Targets
Target | Description | Example Usage |
---|---|---|
test |
Run all tests | make test |
test-server |
Run server tests | make test-server |
test-plugin |
Run plugin tests | make test-plugin |
For a complete list of available targets, run:
make help
Installation
-
Build the plugin:
make build-plugin
-
Copy the built plugin to your Ghidra plugins directory:
cp zig-out/lib/libghidra-mcp-zig.dylib /path/to/ghidra/Extensions/Ghidra/ghidra-mcp-zig/
-
Restart Ghidra
Usage
- Start Ghidra and open a program for analysis
- The MCP plugin will be available in the Ghidra plugin manager
- Use the plugin's features through the Ghidra interface
Available MCP Commands
Command | Description | Parameters |
---|---|---|
decompile |
Decompile a function | address: u64 |
rename_function |
Rename a function | address: u64, new_name: string |
rename_data |
Rename a data object | address: u64, new_name: string |
list_functions |
List all functions | None |
list_data |
List all data objects | None |
list_imports |
List all imports | None |
list_exports |
List all exports | None |
Error Handling
The implementation includes comprehensive error handling with specific error types:
Error Type | Description |
---|---|
ConnectionError |
Connection-related errors |
MessageError |
Message handling errors |
ResponseError |
Response parsing errors |
InvalidAddress |
Invalid memory address |
InvalidFunction |
Invalid function reference |
InvalidData |
Invalid data reference |
DecompilationFailed |
Function decompilation failed |
RenameFailed |
Rename operation failed |
OutOfMemory |
Memory allocation failed |
InvalidProgram |
Invalid program state |
JNIError |
JNI bridge errors |
Development
Adding New Features
- Update the JNI interface in
src/plugin/jni/bridge.zig
- Implement the corresponding functionality in
src/plugin/analysis.zig
- Update the server implementation in
src/server/main.zig
if needed - Rebuild and test
Debugging
- Use
make clean
to remove build artifacts - Check the Ghidra log for plugin-related messages
- The server logs will be available in the console when running with
make run-server
JNI Bridge Implementation
The JNI bridge provides a type-safe interface between Zig and Java:
- Memory management with proper allocation/deallocation
- JNI reference management with
DeleteLocalRef
- Error handling with null checks
- Type conversion between Zig and Java types
- Array creation and element setting
- Object creation and field setting
Key Features
-
Memory Safety
- Automatic cleanup of JNI references
- Proper string handling with UTF-8 conversion
- Safe memory allocation and deallocation
-
Type Safety
- Strong typing for all JNI operations
- Compile-time type checking
- Safe type conversions
-
Error Handling
- Comprehensive error types
- Null checks for all JNI operations
- Proper cleanup on error
-
Object Management
- Safe object creation and destruction
- Field access with type checking
- Array handling with bounds checking
Contributing
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
相关推荐
Confidential guide on numerology and astrology, based of GG33 Public information
Converts Figma frames into front-end code for various mobile frameworks.
Advanced software engineer GPT that excels through nailing the basics.
I find academic articles and books for research and literature reviews.
Discover the most comprehensive and up-to-date collection of MCP servers in the market. This repository serves as a centralized hub, offering an extensive catalog of open-source and proprietary MCP servers, complete with features, documentation links, and contributors.
Micropython I2C-based manipulation of the MCP series GPIO expander, derived from Adafruit_MCP230xx
A unified API gateway for integrating multiple etherscan-like blockchain explorer APIs with Model Context Protocol (MCP) support for AI assistants.
Mirror ofhttps://github.com/suhail-ak-s/mcp-typesense-server
本项目是一个钉钉MCP(Message Connector Protocol)服务,提供了与钉钉企业应用交互的API接口。项目基于Go语言开发,支持员工信息查询和消息发送等功能。
Reviews

user_DTKKyLQa
I've been a loyal user of the ghidra-mcp-zig for some time now, and it has significantly improved my workflow. Kudos to streamerd for creating such a robust and efficient tool. It's well-documented and integrates seamlessly with Ghidra. I highly recommend it for anyone in need of a reliable multi-core processing solution. Check it out on GitHub!