1717
1818## 目录
1919
20- - [ 功能特性 ] ( #功能特性 )
21- - [ 工作原理 ] ( #工作原理 )
22- - [ 安装 ] ( #安装 )
23- - [ 目录结构 ] ( #目录结构 )
24- - [ 构建] ( #构建 )
25- - [ Mod 开发] ( #mod-开发 )
26- - [ 文档] ( #文档 )
27- - [ 许可证] ( #许可证 )
20+ - [ ChuModLoader ] ( #chumodloader )
21+ - [ 目录 ] ( #目录 )
22+ - [ 功能特性 ] ( #功能特性 )
23+ - [ 安装 ] ( #安装 )
24+ - [ 构建] ( #构建 )
25+ - [ Mod 开发] ( #mod-开发 )
26+ - [ 文档] ( #文档 )
27+ - [ 许可证] ( #许可证 )
2828
2929## 功能特性
3030
31- | 分类 | 说明 |
32- | --- | --- |
33- | ** DLL 代理** | 代理 ` winhttp.dll ` ,转发系统 ` winhttp.dll ` 的全部导出,对游戏完全透明 |
34- | ** 自动加载** | 启动时自动扫描并加载 ` mods/*.dll ` |
35- | ** 内存操作** | 内存读写、填充、AOB 特征扫描 |
36- | ** Hook** | Inline hook(创建 / 启用 / 禁用 / 移除)、RTTI vtable 查找 |
37- | ** d3d9 服务** | 代理 Direct3D 9 设备,提供每帧回调、帧率锁定、设备 / 窗口句柄 |
38- | ** Mod 间通信** | 命名服务查找 + 基于 topic 的发布 / 订阅 |
39- | ** 配置** | TOML / INI 单 Mod 配置读写 |
40- | ** 日志** | 分级日志(info / warn / error)+ 控制台颜色 + per-mod 日志文件 |
41- | ** 依赖管理** | 依赖声明 + 拓扑排序,确保加载顺序 |
42- | ** 生命周期** | ` init → on_ready → on_frame → shutdown ` 完整生命周期 |
43- | ** 热重载** | ` reload_mod ` API + ` reload.flag ` 文件触发 |
44- | ** 崩溃保护** | ` catch_unwind ` 包裹回调 + SEH 过滤器 + crash dump + 栈回溯 |
45- | ** 版本检测** | 游戏版本检测 + ` min_loader_version ` 兼容性检查 |
46-
47- ## 工作原理
48-
49- ` chusanApp.exe ` 静态导入了系统 ` winhttp.dll ` 。ChuModLoader 把自己编译成同名的 ` winhttp.dll ` 放在游戏目录,由于 DLL 搜索顺序优先于 ` System32 ` ,游戏启动时会自然加载它。框架再把所有导出转发给真正的系统 ` winhttp.dll ` ,因此对游戏完全透明。
50-
51- 加载后,框架并不会立刻初始化(此时游戏自身尚未运行)。它在 ` DllMain ` 中** 劫持游戏 EXE 的入口点** :改写入口处的指令,使游戏真正开始执行时先跳转到框架的 bootstrap,完成 Mod 加载、crash dump 安装、d3d9 代理注入后,再恢复原始入口点继续运行游戏。
52-
53- ``` text
54- chusanApp.exe 启动
55- └─ 加载游戏目录的 winhttp.dll(实为 ChuModLoader)
56- ├─ 转发系统导出 → System32\winhttp.dll
57- └─ DllMain:劫持游戏入口点
58- 游戏入口点首次执行
59- └─ bootstrap
60- ├─ 安装 crash dump / SEH
61- ├─ 扫描 mods/*.dll,依赖拓扑排序
62- ├─ 逐个驱动 Mod 生命周期
63- │ init → on_ready → on_frame(循环) → shutdown
64- ├─ 注入 d3d9 设备代理
65- └─ 恢复原始入口点,游戏正常运行
66- ```
31+ ** DLL 代理** 代理 ` winhttp.dll ` ,可以不需要注入脚本直接启动游戏
32+ ** 自动加载** 启动时自动扫描并加载 ` mods/*.dll `
6733
6834## 安装
6935
@@ -74,44 +40,6 @@ chusanApp.exe 启动
7440
7541加载日志会写入 ` chumod_loader.log ` ,单 Mod 日志位于 ` mods/log/ ` ,崩溃报告位于 ` mods/crash/ ` 。
7642
77- ## 目录结构
78-
79- ``` text
80- ChuModLoader/
81- ├─ Cargo.toml # workspace(成员:chu-abi、loader)
82- ├─ rust-toolchain.toml
83- ├─ chu-abi/ # C ABI 定义(ChuModInfo / ChuModAPI 等共享类型)
84- │ ├─ Cargo.toml
85- │ └─ src/
86- ├─ loader/ # 加载器主体,编译产物为 winhttp.dll
87- │ ├─ Cargo.toml
88- │ ├─ build.rs # 生成 winhttp 导出转发
89- │ └─ src/
90- │ ├─ lib.rs # 入口、winhttp 代理、游戏入口点劫持
91- │ ├─ loader/ # Mod 扫描、依赖排序、日志、生命周期、崩溃处理
92- │ ├─ api_impl/ # ChuModAPI 函数表实现
93- │ └─ d3d9/ # Direct3D 9 设备代理
94- ├─ include/
95- │ └─ chumod.h # C/C++ Mod 头文件
96- └─ docs/ # 开发文档
97- ```
98-
99- 游戏目录下框架运行时使用的布局:
100-
101- ``` text
102- 游戏目录/
103- ├─ chusanApp.exe
104- ├─ winhttp.dll # ChuModLoader
105- ├─ chumod_loader.log # 加载器日志
106- └─ mods/
107- ├─ <mod>.dll # Mod 二进制
108- ├─ config/<mod_name>.toml # 单 Mod 配置(或 .ini)
109- ├─ manifest/<mod_name>.toml # 单 Mod manifest
110- ├─ log/<mod_name>.log # 单 Mod 日志
111- ├─ crash/ # 崩溃报告
112- └─ reload.flag # 创建即触发全部热重载
113- ```
114-
11543## 构建
11644
11745需要 Rust nightly 工具链 + ` i686-pc-windows-msvc ` target(仓库已通过 ` rust-toolchain.toml ` 固定):
0 commit comments