Skip to content
This repository was archived by the owner on Jul 15, 2026. It is now read-only.

Commit 056ca2d

Browse files
committed
docs: 修改一下描述
1 parent fde7e6e commit 056ca2d

1 file changed

Lines changed: 10 additions & 82 deletions

File tree

README.md

Lines changed: 10 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -17,53 +17,19 @@
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

Comments
 (0)