# redirect_hook **Repository Path**: zhReimu/redirect_hook ## Basic Information - **Project Name**: redirect_hook - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-25 - **Last Updated**: 2026-03-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # redirect_hook `redirect_hook` 是一个面向 Windows 的文件与环境变量重定向 DLL。 它支持两种使用方式: 1. 注入模式:将 `redirect_hook.dll` 注入目标进程,并调用 `InitializeRedirectHook` 安装 hook。 2. 代理模式:将同一份 DLL 重命名为 `version.dll`、`winmm.dll` 或 `winhttp.dll`,放到目标程序目录,通过代理导出加载系统 DLL,并在后台初始化重定向逻辑。 ## 目录说明 - `src/`: 自有源码 - `src/hooks/`: hook 相关实现 - `include/`: 公共头文件 - `dll_resources/`: 资源文件和导出清单 - `lib/minhook-1.3.4/`: vendored 第三方依赖 - `scripts/`: 构建辅助脚本 - `bin/`: 构建输出目录,不纳入版本控制 ## 构建要求 - Windows - GNU Make - Visual C++ Build Tools 或已进入 Developer Command Prompt 如果 `cl.exe` 不在 `PATH` 中,请显式传入 `VCVARS_BAT`: ```powershell make ARCH=x64 VCVARS_BAT="C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" ``` ## 常用命令 ```powershell make make ARCH=x64 make build ARCH=x86 make release make test-tools ARCH=x64 make clean ``` 默认情况下: - `make` 会同时构建 `x86` 和 `x64` - `make release` 会构建 `x86` 和 `x64`,并将每个架构的 `redirect_hook.dll`、`injector.exe`、`test_write.exe`、`redirect.conf` 打包到 `bin/redirect_hook.zip` - 构建前会自动生成代理导出表 - 会把 `redirect.conf.example` 复制到输出目录并命名为 `redirect.conf` - release 构建会启用更激进的编译和链接裁剪选项,以尽量缩小 DLL/EXE 体积 ## 配置文件 示例配置见 [redirect.conf.example](./redirect.conf.example)。 配置格式: ```ini [GLOBAL] workdir, ./steam_settings [LOGGER] level, debug path, ./logs/redirect_hook.log [DIAGNOSTICS] enabled, false dump_dir, ./logs/dumps [FILE] %APPDATA%, ./appdata %LOCALAPPDATA%, ./localappdata %USERPROFILE%\AppData\LocalLow\Nolla_Games_Noita, ./LocalLow/Nolla_Games_Noita [ENV] %APPDATA%, ./appdata ``` 规则说明: - `[GLOBAL]` 用于设置后续规则的相对路径基准目录 - `workdir` 支持相对路径,默认相对 DLL 所在目录解析 - 配置了 `workdir` 后,后续 `LOGGER`、`FILE`、`ENV` 里出现的相对路径都以它为基准 - `[LOGGER]` 用于配置文件日志输出 - `level` 支持 `error` / `warn` / `info` / `debug` - `path` 支持相对路径,默认相对 DLL 所在目录;若已设置 `workdir`,则相对 `workdir` - `[DIAGNOSTICS]` 用于启用崩溃诊断 - `enabled` 支持 `true` / `false` / `1` / `0` / `yes` / `no` / `on` / `off` - `dump_dir` 支持相对路径,默认相对 DLL 所在目录;若已设置 `workdir`,则相对 `workdir` - 当 `DIAGNOSTICS.enabled=true` 且未显式设置 `LOGGER.path` 时,会自动使用 `./logs/redirect_hook.log` - 诊断开启后,hook 内部异常会写文本日志和最多 1 份 minidump,并回退到原始 API - 如需在配置解析前就启用 bootstrap 日志,可提前设置进程环境变量 `REDIRECT_HOOK_DIAGNOSTICS=1` - `[FILE]` 用于文件路径重定向 - `[ENV]` 用于环境变量返回值重定向 - `TARGET` 支持相对路径,默认相对 DLL 所在目录;若已设置 `workdir`,则相对 `workdir` - 配置文件要求 UTF-8 编码 - 配置文件查找顺序为 `./redirect.conf`,若不存在则回退到 `./steam_settings/redirect.conf` ## 最小验证流程 1. 执行 `make ARCH=x64` 2. 打开 `bin/x64/redirect.conf`,按需修改规则 3. 运行 `bin/x64/test_write.exe` 4. 如需注入模式,使用 `bin/x64/injector.exe ` 5. 如需在注入前就打开 bootstrap 诊断,使用 `bin/x64/injector.exe --diag ` 6. 观察目标路径、环境变量返回值、`logs/redirect_hook.log` 和 `logs/dumps/*.dmp` ## 维护约定 - `dll_resources/exports_version.def`、`dll_resources/exports_winmm.def`、`dll_resources/exports_winhttp.def` 是代理导出的单一数据源 - `dll_resources/exports_proxy.def` 与 `src/generated/*` 为构建时生成文件,不手工编辑 - `lib/minhook-1.3.4/` 为第三方代码,不在本仓库内做业务性修改