Skip to content

Latest commit

 

History

History
115 lines (82 loc) · 6.67 KB

README.zh-CN.md

File metadata and controls

115 lines (82 loc) · 6.67 KB
English (en-US) 简体中文 (zh-CN)

KNSoft.SlimDetours

NuGet Downloads GitHub Actions Workflow Status PR Welcome GitHub License

SlimDetours是一个基于Microsoft Detours改进而来的Windows API挂钩库。

功能

相比于原版Detours,有以下优势:

用法

NuGet Downloads

提要

KNSoft.SlimDetours包体同时含有SlimDetours与原版Microsoft Detours

对于KNSoft.SlimDetours包含SlimDetours.h头文件,或者对于原版Microsoft Detours包含detours.h头文件,然后链接编译出的库KNSoft.SlimDetours.lib

NuGet包KNSoft.SlimDetours是开箱即用的,只要安装到项目,编译好的库就会自动加入链接。

#include <KNSoft/SlimDetours/SlimDetours.h> // KNSoft.SlimDetours
#include <KNSoft/SlimDetours/detours.h>     // Microsoft Detours

如果你项目的配置名称既不是“Release”也不是“Debug”,NuGet包中的MSBuild表单无法自动链接编译好的库,需要手动链接,例如:

#pragma comment(lib, "Debug/KNSoft.SlimDetours.lib")

用法已进行了简化,例如挂钩仅需一行:

SlimDetoursSetHook((PVOID*)&g_pfnXxx, Hooked_Xxx);

更多简化的API参考Wrapper.c

详细说明

原版Microsoft Detours风格的函数也有保留,但有少许不同:

hr = SlimDetoursTransactionBegin();
if (FAILED(hr))
{
    return hr;
}
hr = SlimDetoursAttach((PVOID*)&g_pfnXxx, Hooked_Xxx);
if (FAILED(hr))
{
    SlimDetoursTransactionAbort();
    return hr;
}
return SlimDetoursTransactionCommit();

延迟挂钩

“延迟挂钩”将在目标DLL加载时自动挂钩,在NT6+上支持。

比如,调用SlimDetoursDelayAttach来在a.dll加载时自动挂勾a.dll!FuncXxx

SlimDetoursDelayAttach((PVOID*)&g_pfnFuncXxx,
                       Hooked_FuncXxx,
                       L"a.dll",
                       L"FuncXxx",
                       NULL,
                       NULL);

演示:DelayHook.c

兼容性

项目构建:主要考虑对最新MSVC生成工具和SDK的支持。本项目代码能向下兼容MSVC生成工具与GCC,但具体还要看其依赖的NDK,参考SlimDetours.NDK.inl。支持随ReactOS一同构建。

制品集成:广泛地兼容MSVC生成工具(已知支持VS2015),以及不同编译配置(如/MD/MT)。

运行环境:NT5及以上操作系统,x86/x64/ARM64平台。

Caution

处于beta阶段,应小心使用。

协议

GitHub License

KNSoft.SlimDetours根据MIT协议进行许可。

源码基于Microsoft Detours,其根据MIT协议进行许可。

同时使用了KNSoft.NDK以访问底层Windows NT API及其中的单元测试框架。