ghidra-mcp-zig

ghidra-mcp-zig

3.3

If you are the rightful owner of ghidra-mcp-zig and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

A Ghidra plugin that provides a bridge between Ghidra and a Zig-based MCP server for enhanced program analysis capabilities.

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

  1. Clone the repository:

    git clone https://github.com/yourusername/ghidra-mcp-zig.git
    cd ghidra-mcp-zig
    
  2. 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
    
  3. 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
    
  4. Run the server:

    make run-server
    

Build Targets

TargetDescriptionExample Usage
allBuild all componentsmake all
build-serverBuild MCP servermake build-server
build-pluginBuild Ghidra pluginmake build-plugin
cleanClean all artifactsmake clean
clean-serverClean server artifactsmake clean-server
clean-pluginClean plugin artifactsmake clean-plugin

Run Targets

TargetDescriptionExample Usage
run-serverStart MCP servermake run-server
run-pluginStart Ghidra pluginmake run-plugin

Test Targets

TargetDescriptionExample Usage
testRun all testsmake test
test-serverRun server testsmake test-server
test-pluginRun plugin testsmake test-plugin

For a complete list of available targets, run:

make help

Installation

  1. Build the plugin:

    make build-plugin
    
  2. 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/
    
  3. Restart Ghidra

Usage

  1. Start Ghidra and open a program for analysis
  2. The MCP plugin will be available in the Ghidra plugin manager
  3. Use the plugin's features through the Ghidra interface

Available MCP Commands

CommandDescriptionParameters
decompileDecompile a functionaddress: u64
rename_functionRename a functionaddress: u64, new_name: string
rename_dataRename a data objectaddress: u64, new_name: string
list_functionsList all functionsNone
list_dataList all data objectsNone
list_importsList all importsNone
list_exportsList all exportsNone

Error Handling

The implementation includes comprehensive error handling with specific error types:

Error TypeDescription
ConnectionErrorConnection-related errors
MessageErrorMessage handling errors
ResponseErrorResponse parsing errors
InvalidAddressInvalid memory address
InvalidFunctionInvalid function reference
InvalidDataInvalid data reference
DecompilationFailedFunction decompilation failed
RenameFailedRename operation failed
OutOfMemoryMemory allocation failed
InvalidProgramInvalid program state
JNIErrorJNI bridge errors

Development

Adding New Features

  1. Update the JNI interface in src/plugin/jni/bridge.zig
  2. Implement the corresponding functionality in src/plugin/analysis.zig
  3. Update the server implementation in src/server/main.zig if needed
  4. 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
  1. Memory Safety

    • Automatic cleanup of JNI references
    • Proper string handling with UTF-8 conversion
    • Safe memory allocation and deallocation
  2. Type Safety

    • Strong typing for all JNI operations
    • Compile-time type checking
    • Safe type conversions
  3. Error Handling

    • Comprehensive error types
    • Null checks for all JNI operations
    • Proper cleanup on error
  4. Object Management

    • Safe object creation and destruction
    • Field access with type checking
    • Array handling with bounds checking

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Commit your changes
  4. Push to the branch
  5. Create a Pull Request

License

This project is licensed under the MIT License - see the file for details.