MinHook
适用于 Windows 的极简 x86/x64 API 钩子库
http://www.codeproject.com/KB/winsdk/LibMinHook.aspx
版本历史
-
v1.3.3 - 2017年1月8日
- 添加了一个辅助函数
MH_CreateHookApiEx
。(感谢 asm256) - 支持 Visual Studio 2017 RC。
- 添加了一个辅助函数
-
v1.3.2.1 - 2015年11月9日(仅 Nuget 包)
- 修复了对 Visual Studio 2015 的不充分支持。
-
v1.3.2 - 2015年11月1日
- 支持 Visual Studio 2015。
- 支持 MinGW。
-
v1.3.2-beta3 - 2015年7月21日(仅 Nuget 包)
- 支持 MinGW。(实验性)
-
v1.3.2-beta2 - 2015年5月18日
- 修复了一些细微的错误。(感谢 RaMMicHaeL)
- 添加了一个辅助函数
MH_StatusToString
。(感谢 Jan Klass)
-
v1.3.2-beta - 2015年5月12日
- 修复了 x64 模式下可能出现的线程死锁。(感谢 Aleh Kazakevich)
- 进一步减小了占用空间。
- 支持 Visual Studio 2015 RC。(实验性)
-
v1.3.1.1 - 2015年4月7日(仅 Nuget 包)
- 支持 WDK8.0 和 8.1。
-
v1.3.1 - 2015年3月19日
- 相比 v1.3.1-beta 没有重大变化。
-
v1.3.1-beta - 2015年3月11日
- 添加了一个辅助函数
MH_CreateHookApi
。(感谢 uniskz) - 修复了一些工具报告的虚假内存泄漏。
- 修复了一个降低的兼容性问题。
- 添加了一个辅助函数
-
v1.3 - 2014年9月13日
- 相比 v1.3-beta3 没有重大变化。
-
v1.3-beta3 - 2014年7月31日
- 修复了一些小错误。
- 改进了内存管理。
-
v1.3-beta2 - 2014年7月21日
- 将参数改为 Windows 友好类型。(void* 改为 LPVOID)
- 修复了一些小错误。
- 重新组织了源文件。
- 进一步减小了占用空间。
-
v1.3-beta - 2014年7月17日
- 用纯 C 重写以减小占用空间和内存使用。(由 Andrey Unis 建议)
- 简化了整体代码基础,使其更易读和维护。
- 将许可证从 3 条款 BSD 许可证改为 2 条款 BSD 许可证。
-
v1.2 - 2013年9月28日
- 移除了 boost 依赖(jarredholman)。
- 修复了 GetRelativeBranchDestination 函数中的一个小错误(pillbug99)。
- 添加了
MH_RemoveHook
函数,用于移除使用MH_CreateHook
函数创建的钩子。 - 添加了以下函数,以一次性启用或禁用多个钩子:
MH_QueueEnableHook
、MH_QueueDisableHook
、MH_ApplyQueued
。这是处理多个钩子的首选方式,因为每次调用MH_EnableHook
或MH_DisableHook
都会挂起和恢复所有线程。 - 使
MH_EnableHook
和MH_DisableHook
函数在传递MH_ALL_HOOKS
参数时能够启用/禁用所有创建的钩子。这也是处理多个钩子的有效方式。 - 如果目标函数太小而无法用跳转进行修补,MinHook 会尝试将跳转放在函数上方。如果这也失败了,
MH_CreateHook
函数会返回MH_ERROR_UNSUPPORTED_FUNCTION
。这修复了在 Windows 7 x64 上钩接 LoadLibraryExW 函数的问题(由 Obble 报告)。
-
v1.1 - 2009年11月26日
- 改变了接口,使创建钩子和蹦床函数一次完成,以防止在创建蹦床函数之前调用绕道函数。(由 xliqz 报告)
- 将函数名从
MinHook_*
缩短为MH_*
,使其更便于使用。
-
v1.0 - 2009年11月22日
- 初始发布。
构建 MinHook - 使用 vcpkg
你可以使用 vcpkg 依赖管理器下载和安装 MinHook:
git clone https://github.com/microsoft/vcpkg
.\vcpkg\bootstrap-vcpkg.bat
.\vcpkg\vcpkg integrate install
.\vcpkg\vcpkg install minhook
vcpkg 中的 MinHook 端口由 Microsoft 团队成员和社区贡献者保持更新。如果版本过时,请在 vcpkg 仓库上创建问题或拉取请求。