ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

x64dbg-MCP Server 深度解析:bridge.zig 运行时符号解析如何打通 x64dbg SDK(新手完整指南)

x64dbg-MCP Server 深度解析:bridge.zig 运行时符号解析如何打通 x64dbg SDK(新手完整指南) x64dbg-MCP Server 深度解析bridge.zig 运行时符号解析如何打通 x64dbg SDK新手完整指南【免费下载链接】x64dbg-mcp-serverx64dbg-MCP Server is a native MCP (Model Context Protocol) plugin for x64dbg that exposes the debuggers full functionality over HTTP. Connect any MCP-compatible AI assistant and control x64dbg programmatically: set breakpoints, step through code, read memory, dump registers, and more. Built with Zig — zero dependencies, single-binary output, cros项目地址: https://gitcode.com/gh_mirrors/x6/x64dbg-mcp-serverx64dbg-MCP Server 是一款用 Zig 编写的 x64dbg 原生 MCPModel Context Protocol插件它把调试器的完整能力通过 HTTP 暴露给任意 AI 助手设断点、单步执行、读内存、dump 寄存器全部可用自然语言驱动。整条链路的咽喉是一个文件——bridge.zig它在插件加载时用运行时符号解析动态对接 x64dbg SDK无需链接任何 SDK 库单二进制、零依赖同一份代码同时支持 x32 与 x64。为什么需要 bridge 这一层x64dbg 的插件以.dp32/.dp64DLL 形式运行在调试器进程内部它调用的是 x64dbg 自己导出的 APIDbgMemRead、DbgCmdExec等这些符号位于两个动态库里x64bridge.dllx32 版为x32bridge.dll——调试引擎 APIx64dbg.dllx32 版为x32dbg.dll——插件宿主 API注册回调、菜单、日志如果编译期就链接这两个 DLL就必须在 Windows 上安装 SDK、写两套构建配置。bridge.zig 的选择是编译期只声明函数指针类型运行期再用GetModuleHandleAGetProcAddress逐个按名字取真实地址。好处一目了然收益说明 跨架构复用一份源码同时产出 x32/x64 插件靠sizeOf(usize)判断选择 DLL 名 零依赖不链接任何 x64dbg 库文件交叉编译即可出包 优雅降级新版本的扩展 API 用可选解析旧版宿主不崩三步看懂运行时符号解析init 函数核心逻辑集中在 bridge.init()可以拆成三步第 1 步拿到两个宿主模块的句柄bridge_module GetModuleHandleA(x64bridge.dll) dbg_module GetModuleHandleA(x64dbg.dll)插件本身就加载在 x64dbg.exe 里这两个 DLL 早已在进程地址空间中GetModuleHandleA只是查表不需要LoadLibrary见 bridge.zig#L339-L353。取不到句柄就直接返回错误插件加载失败——这是最快的失败路径日志一看便知。第 2 步必需符号——解析不到就报错DbgCmdExec、DbgMemRead、DbgMemWrite、_plugin_registercallback等 20 多个命脉函数用 resolve() 处理GetProcAddress返回空指针就触发 panic绝不让插件带着空指针跑起来。每个函数在编译期都有精确的 Zig 函数指针类型声明处调用时不存在猜参数的风险。第 3 步可选符号——解析不到就置空DbgDisasmFastAt、DbgMemMap、DbgGetThreadList、GuiGetDisassembly等增强 API 走 resolveOptional()解析失败只是把指针置为null上层按需判断。这让同一份插件能兼容不同版本的 x64dbg——新版有增强功能旧版功能自动缩水但不崩溃。容易被忽略的两个 ABI 细节1. 返回值的 1 字节 bool 陷阱。x64dbg 的 bridge 函数返回 Cbool1 字节放在 AL而函数指针声明成 Win32BOOL4 字节。x86 上 EAX 高 3 字节可能是垃圾值所以像 isDebugging() 这样的辅助函数特意把返回值掩到最低字节再判断——这种细节不处理调试状态判断会时灵时不灵。2. 结构体跨位宽对齐。例如 MEMPAGE 内嵌的MEMORY_BASIC_INFORMATION在 x64 下有 4 字节尾部填充x32 下没有代码用if (sizeOf(usize) 8) 4 else 0动态补位保证两种位宽下结构体布局都与 C 侧逐字节一致。bridge 之上71 个 MCP 工具如何落地bridge 解决怎么调到 SDK上层则解决AI 怎么调用mcp_server.zig在后台线程起 HTTP 服务默认 x64 监听 9094 端口处理 JSON-RPC 2.0 请求支持 Streamable HTTP 与 SSE 双传输并强制 Bearer Token 鉴权tools.zig定义 71 个工具SetBreakpoint、ReadMemory、StepInto、GetCallStack……每个 handler 内部直接调用 bridge 的memRead、cmdExec等辅助函数把 SDK 结果序列化成 JSON 返回main.zig插件入口pluginit第一件事就是调用bridge.init()成功后再注册StartMCPServer命令、菜单项和 22 个调试事件回调。整条链路没有任何轮询或外部进程MCP 客户端 → HTTP → JSON-RPC 分发 → bridge 函数指针 → x64dbg SDK全部发生在调试器自己的地址空间内。项目结构速查文件职责src/core/bridge.zigx64dbg SDK 运行时绑定本文主角src/core/mcp_server.zigHTTP 服务与 JSON-RPC 分发src/core/config.zigWin32 配置对话框与持久化src/mcp/tools.zigMCP 工具定义与处理函数src/mcp/json.zigJSON 读写助手src/main.zig插件入口、菜单、事件回调⚠️ 安全提醒该插件拥有对目标进程的完全调试控制权且通信为未加密 HTTP务必在可信网络中使用并通过配置对话框管理 Token。小结bridge.zig 用一个不到 400 行的文件回答了三个问题去哪找符号宿主 DLL 句柄、怎么找GetProcAddress 类型化函数指针、找不到怎么办必需则报错、可选则降级。这套编译期声明类型、运行期解析地址的模式是任何想以插件形式嵌入宿主程序、又不想被宿主构建系统绑架的项目都值得抄作业的范本。想动手验证用zig build -DoptimizeReleaseSafe --prefix dist一条命令即可同时产出 x32 与 x64 插件见 README.md。【免费下载链接】x64dbg-mcp-serverx64dbg-MCP Server is a native MCP (Model Context Protocol) plugin for x64dbg that exposes the debuggers full functionality over HTTP. Connect any MCP-compatible AI assistant and control x64dbg programmatically: set breakpoints, step through code, read memory, dump registers, and more. Built with Zig — zero dependencies, single-binary output, cros项目地址: https://gitcode.com/gh_mirrors/x6/x64dbg-mcp-server创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表