Skip to main content
Glama
Evan7198

PCILeech MCP Server

by Evan7198
CLAUDE.md4.83 kB
# CLAUDE.md 此文件为 Claude Code (claude.ai/code) 在此代码库中工作时提供指导。 ## 项目概述 这是一个 MCP (Model Context Protocol) 服务器,为 PCILeech 提供标准化接口,实现基于 DMA 的内存读写操作。它允许 AI 助手通过自然语言命令执行内存调试操作。 **关键特性:** - 通过 stdio 运行的 MCP 服务器 - 包装 PCILeech 可执行文件进行 DMA 内存操作 - 提供三个 MCP 工具:memory_read、memory_write、memory_format - 异步架构使用 Python asyncio ## 核心架构 ### 两层设计 1. **MCP 服务器层** (`main.py`) - 处理 MCP 协议通信 (stdio transport) - 定义工具架构和参数验证 - 格式化输出供 AI 分析 (hexdump、ASCII、字节数组、DWORD 数组) - 异步工具处理器:`handle_memory_read`、`handle_memory_write`、`handle_memory_format` 2. **PCILeech 包装层** (`pcileech_wrapper.py`) - 管理 PCILeech 可执行文件的 subprocess 调用 - 处理地址对齐和分块读取 (display 命令返回 256 字节,对齐到 16 字节边界) - 解析 PCILeech 输出格式 - 超时和错误处理 ### 关键实现细节 **内存读取对齐:** - PCILeech 的 `display` 命令总是返回 256 字节,对齐到 16 字节边界 - `read_memory()` 自动处理: - 计算对齐地址 - 分块读取 256 字节块 - 提取和拼接请求的字节范围 - 支持任意地址和长度 **配置系统:** - `config.json` 定义可执行文件路径和超时 - 路径相对于配置文件解析为绝对路径 - 懒加载初始化 - 不在启动时验证硬件连接 ## 常用命令 ### 开发环境设置 ```bash # 激活虚拟环境 .venv\Scripts\activate # 安装依赖 pip install -r requirements.txt ``` ### 运行服务器 ```bash # 通过 Claude Code 集成运行 (推荐) # 在 Claude Code 的 MCP 服务器配置中添加: ``` ```json { "args": [ "C:\\Users\\Administrator\\Desktop\\mcp_server_pcileech\\main.py" ], "command": "C:\\Users\\Administrator\\Desktop\\mcp_server_pcileech\\.venv\\Scripts\\python.exe", "cwd": "C:\\Users\\Administrator\\Desktop\\mcp_server_pcileech", "env": {} } ``` **配置说明:** - `command`: 必须使用虚拟环境中的 Python 可执行文件路径 - `args`: 指向 main.py 的绝对路径 - `cwd`: 项目根目录,确保能找到 config.json 和 pcileech 目录 - `env`: 可选的环境变量 (通常为空) ### 开发工具 ```bash # 代码格式化 black main.py pcileech_wrapper.py # 类型检查 mypy main.py pcileech_wrapper.py # 测试 (如果有) pytest ``` ### PCILeech 验证 ```bash # 验证 PCILeech 硬件 cd pcileech pcileech.exe probe # 测试内存读取 pcileech.exe display -min 0x1000 ``` ## 修改代码时的注意事项 ### 添加新的 MCP 工具 1. 在 `list_tools()` 中定义工具架构 2. 在 `call_tool()` 中添加工具路由 3. 实现异步处理器函数 `async def handle_<tool_name>(args: dict) -> list[TextContent]` 4. 使用 `get_pcileech()` 访问 PCILeech 包装器 ### 修改内存操作 - 所有内存地址处理都在 `pcileech_wrapper.py` 中 - 记住 `display` 命令的 256 字节/16 字节对齐限制 - 解析逻辑在 `_parse_display_output()` 中 - 处理偏移、十六进制和 ASCII 列 - 始终规范化地址 (移除 '0x' 前缀进行内部处理) ### 错误处理 - 使用 `PCILeechError` 用于所有 PCILeech 相关错误 - MCP 工具处理器捕获异常并返回 TextContent 错误 - 超时在 `config.json` 中配置,在包装器中强制执行 ### 输出格式 - `memory_format` 工具提供多种视图供 AI 分析 - 格式化函数:`format_memory_dump()`、`format_ascii_view()`、`format_byte_array()`、`format_dword_array()` - 保持输出清晰和可解析 - AI 将处理它 ## 重要限制 - **仅 Windows**: PCILeech 是 Windows 专用 - **硬件依赖**: 需要 PCILeech 硬件连接 - **读取大小限制**: - `memory_read`: 最大 1MB - `memory_format`: 最大 4KB (用于可读输出) - **同步 PCILeech 调用**: 包装器使用 subprocess.run (阻塞),但在异步上下文中调用 - **无并发内存操作**: 每个 PCILeech 命令都是顺序执行的 ## 调试技巧 1. **检查 PCILeech 输出**: 包装器记录命令和原始输出 (INFO 级别) 2. **验证地址对齐**: 使用 `pcileech.exe display -min <addr>` 直接测试 3. **解析问题**: 检查 `_parse_display_output()` 正则表达式和行格式 4. **MCP 协议**: 服务器在 stdio 上运行 - 确保没有打印语句干扰协议 5. **超时**: 如果操作合理地慢,在 `config.json` 中增加 `timeout_seconds` ## 安全上下文 此工具设计用于: - 授权的硬件调试 - 安全研究 (具有适当授权) - 教育目的 - 个人硬件开发 不要用于未经授权的访问或恶意活动。用户负责遵守所有适用法律。

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Evan7198/mcp_server_pcileech'

If you have feedback or need assistance with the MCP directory API, please join our Discord server