The Minimalistic x86/x64 API Hooking Library for Windows
http://www.codeproject.com/KB/winsdk/LibMinHook.aspx
A fork of the MinHook library, with support for POSIX and MacOS X
No previous behavior should have changed, besides the lack of thread suspension and context changing in POSIX, which will probably never be added, looking at the state of their API. However, there is an assumption being made in the function GetMemoryBlock, located at buffer.c, that is, mmap should use the address hint given to it to allocate a block of memory close to the origin address.
I need some funds to continue developing this library. All contributions gratefully accepted.
-
v1.3.6 - 29 Aug 2017
- Fixed IsExecutableAddress failing in x86-64 because of incorrect parameters
-
v1.3.5 - 28 Aug 2017
- Improved architecture discovery
- Added full MacOS X support (thread suspension and context changing)
- Added GCC Makefile (able to compile for Windows, Linux and MacOS X)
-
v1.3.4 - 27 Aug 2017
- Added POSIX support
-
v1.3.3 - 8 Jan 2017
- Added a helper function
MH_CreateHookApiEx
. (Thanks to asm256) - Support Visual Studio 2017 RC.
- Added a helper function
-
v1.3.2.1 - 9 Nov 2015 (Nuget package only)
- Fixed an insufficient support for Visual Studio 2015.
-
v1.3.2 - 1 Nov 2015
- Support Visual Studio 2015.
- Support MinGW.
-
v1.3.2-beta3 - 21 Jul 2015 (Nuget package only)
- Support MinGW. (Experimental)
-
v1.3.2-beta2 - 18 May 2015
- Fixed some subtle bugs. (Thanks to RaMMicHaeL)
- Added a helper function
MH_StatusToString
. (Thanks to Jan Klass)
-
v1.3.2-beta - 12 May 2015
- Fixed a possible thread deadlock in x64 mode. (Thanks to Aleh Kazakevich)
- Reduced the footprint a little more.
- Support Visual Studio 2015 RC. (Experimental)
-
v1.3.1.1 - 7 Apr 2015 (Nuget package only)
- Support for WDK8.0 and 8.1.
-
v1.3.1 - 19 Mar 2015
- No major changes from v1.3.1-beta.
-
v1.3.1-beta - 11 Mar 2015
- Added a helper function
MH_CreateHookApi
. (Thanks to uniskz). - Fixed a false memory leak reported by some tools.
- Fixed a degradated compatibility issue.
- Added a helper function
-
v1.3 - 13 Sep 2014
- No major changes from v1.3-beta3.
-
v1.3-beta3 - 31 Jul 2014
- Fixed some small bugs.
- Improved the memory management.
-
v1.3-beta2 - 21 Jul 2014
- Changed the parameters to Windows-friendly types. (void* to LPVOID)
- Fixed some small bugs.
- Reorganized the source files.
- Reduced the footprint a little more.
-
v1.3-beta - 17 Jul 2014
- Rewrote in plain C to reduce the footprint and memory usage. (suggested by Andrey Unis)
- Simplified the overall code base to make it more readable and maintainable.
- Changed the license from 3-clause to 2-clause BSD License.
-
v1.2 - 28 Sep 2013
- Removed boost dependency (jarredholman).
- Fixed a small bug in the GetRelativeBranchDestination function (pillbug99).
- Added the
MH_RemoveHook
function, which removes a hook created with theMH_CreateHook
function. - Added the following functions to enable or disable multiple hooks in one go:
MH_QueueEnableHook
,MH_QueueDisableHook
,MH_ApplyQueued
. This is the preferred way of handling multiple hooks as every call toMH_EnableHook
orMH_DisableHook
suspends and resumes all threads. - Made the functions
MH_EnableHook
andMH_DisableHook
enable/disable all created hooks when theMH_ALL_HOOKS
parameter is passed. This, too, is an efficient way of handling multiple hooks. - If the target function is too small to be patched with a jump, MinHook tries to place the jump above the function. If that fails as well, the
MH_CreateHook
function returnsMH_ERROR_UNSUPPORTED_FUNCTION
. This fixes an issue of hooking the LoadLibraryExW function on Windows 7 x64 (reported by Obble).
-
v1.1 - 26 Nov 2009
- Changed the interface to create a hook and a trampoline function in one go to prevent the detour function from being called before the trampoline function is created. (reported by xliqz)
- Shortened the function names from
MinHook_*
toMH_*
to make them handier.
-
v1.0 - 22 Nov 2009
- Initial release.