mirror of
https://github.com/aydencharles/onionHEN.git
synced 2026-10-22 20:02:59 -05:00
Add kylin-core-style host tests for CheatParserFactory (json/shn/mc4/ShnExt) and cheat utils, with sample fixtures and a Makefile under source/util/tests.
3.6 KiB
3.6 KiB
金手指 C++ 架构
目标
把 util 金手指收成可扩展的 C++ 模块:编排、写内存策略、格式解析策略用 C++ 表达;ShnExt 重型 crypto/deflate/keystone 仍为 C 翻译单元,经 Adapter 接入。
设计模式(克制使用)
| 模式 | 用在哪 | 解决什么 |
|---|---|---|
| Facade | CheatService |
IPC 只依赖一个入口:export / toggle / flatten / ensureDir |
| Strategy | IMemoryBackend |
mdbg vs kdirect 可替换写内存策略 |
| Factory Method | MemoryBackendFactory::create() |
按 util_system_fw_major() 选后端 |
| Strategy + Factory | ICheatParser / CheatParserFactory |
json / shn / mc4 / ShnExt 解析路径统一 |
| Adapter | ShnExtCheatParser |
包装 orion_cheat_parse_shnext_buffer |
| RAII | std::mutex + lock_guard |
锁与服务状态生命周期 |
| Singleton(进程级服务) | CheatService::instance() |
与原全局 service 同生命周期,线程安全访问 |
不引入:Observer、Command、Abstract Factory 全家桶(当前无多套产品族需求)。
模块结构
orion::cheats
├── IMemoryBackend.hpp
│ ├── MdbgMemoryBackend
│ └── KdirectMemoryBackend
├── MemoryBackendFactory
├── ICheatParser.hpp
│ ├── JsonCheatParser
│ ├── XmlCheatParser # .shn Trainer XML
│ ├── Mc4CheatParser # AES-256-CBC → XML
│ └── ShnExtCheatParser # Adapter → C parser
├── CheatParserFactory # createByFormat / loadFile / loadBuffer
├── CheatApplier # toggle / master-code / verify / code-cave
├── CheatRepository # 路径解析、热重载签名、调用 Factory
├── CheatFlatten # 仓库 flatten 安装(C)
└── CheatService # Facade + 互斥状态
│
▼
C: cheat_engine_utils / ShnExt / third_party crypto
│
▼
util_platform + pt/mdbg/kernel
调用顺序
IPC handleIPC
→ CheatService::instance()
→ exportList / toggle
→ Repository::refresh (path + file signature)
→ CheatParserFactory::loadFile
→ ICheatParser::parse (by extension)
→ Applier::toggle
→ MemoryBackendFactory
→ util_find_module
→ backend read/write (+ optional code cave)
格式解析
| 扩展名 | Parser | 说明 |
|---|---|---|
.json |
JsonCheatParser |
GoldHEN/OrionHEN JSON(手写 key 扫描) |
.shn |
XmlCheatParser |
Trainer XML |
.mc4 |
Mc4CheatParser |
Base64 + AES-256-CBC → XML |
.ShnExt |
ShnExtCheatParser |
deflate + AES + cJSON + 可选 keystone |
加载入口:CheatParserFactory::loadFile / loadBuffer(CheatRepository 调用)。
扩展点
- 新写内存后端:实现
IMemoryBackend,在MemoryBackendFactory注册固件条件。 - 新文件格式:实现
ICheatParser,在CheatParserFactory::createByFormat注册扩展名;Repository 路径扫描列表同步扩展;补source/util/testshost 用例。 - 新 IPC 操作:只扩
CheatService公开方法,避免 IPC 直接碰 Applier/Backend。
Host 单元测试
解析器可在 macOS/Linux 上测(无 PS5 SDK),参考 kylin-core tests/test_cheat_*:
cd source/util/tests && make test
覆盖:utils(hex/extract/brace)、Factory 路由、JSON/SHN/MC4 合成样例、真实 fixtures(json/shn/mc4/ShnExt)。
不覆盖:CheatApplier / 写内存(需目标机)。