解决方法1:#pragma comment(lib,"User32.lib")
解决方法2:项目属性、链接器、输入、附加依赖项,填写User32.lib即可。
在编译Detours4.0的时候,nmake提示错误:
Windows Kits\8.0\include\um\windows.h fatal error C1083: 无法打开包括文件:“excpt.h”,找不到相关头文件。
解决方法1:设置头文件搜索路径(少啥添啥)
该方法最实用,少INCLUDE文件你搜到后,就将该文件所在的目录添加到系统环境变量INCLUDE里面,少LIB文件你就将它的目录添加到系统环境变量LIB里面,少了添啥。
解决方法2(如果头文件不在VC目录下面的话,就以上面的方法1为主):
打开cmd命令控制台,找到vcvars32.bat所在路径,例如:D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin
,运行该批处理文件;
或者运行vcvarsall.bat文件:
cd D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC
vcvarsall.bat
参考链接:
Windows环境下用nmake编译libevent
nmake编译libraw
1、下载地址
https://github.com/Microsoft/Detours
2、解压后,将system.mak和src目录拷贝到Visual Studio 11目录的VC目录下,并将src目录下的Makefile文件的只读属性去掉,然后打开Makefile文件进行如下修改:
CFLAGS=/nologo /W4 /WX- /we4777 /we4800 /Zi /MT /Gy /Gm- /Zl /Od /DDETOUR_DEBUG=$(DETOURS_DEBUG)
将上述选项中的/WX修改为/WX-,/WX 是警告被视为错误,而 /WX- 是警告不被视为错误。
3、右键以管理员模式运行VS2012 x64 Native Tools Command Prompt:
cd D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC
d:
cd src
nmake
detours.lib生成成功,并会自动将detours.h、detver.h拷贝到D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC
目录中的include目录中,这样就可以在你项目.cpp中直接引用detours.h头文件。
将D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC
目录下编译生成的库目录lib.X64拷贝粘贴到你的项目目录中,并设置你的项目属性:
detours4.0.1x64.lb是我
#include
#include "detours.h"
#include "detoursHookApi.h"BOOL HookApi(PVOID *oldApi/*要HOOK的地址 变量*/, PVOID newApi/*新的函数地址*/)
{BOOL br = FALSE;DetourRestoreAfterWith(); //恢复原来状态DetourTransactionBegin(); //拦截开始DetourUpdateThread(GetCurrentThread()); //刷新当前线程//这里可以连续多次调用DetourAttach,表示HOOK多个函数//DetourAttach(&(PVOID&)OldCreateMutexA, NewCreateMutexA);DetourAttach(oldApi, newApi);//br返回NO_ERROR 表示成功br=DetourTransactionCommit(); //让拦截生效if(br == NO_ERROR){br = TRUE;}else{br = FALSE;}return br;
}BOOL UnHookApi(PVOID *oldApi, PVOID newApi)
{BOOL br = FALSE;DetourTransactionBegin(); //拦截开始DetourUpdateThread(GetCurrentThread()); //刷新当前线程//这里可以连续多次调用DetourAttach,表示撤销多个函数HOOK//DetourAttach(&(PVOID&)OldCreateMutexA, NewCreateMutexA);DetourDetach(oldApi, newApi); //卸载HOOK//br返回NO_ERROR 表示成功br=DetourTransactionCommit(); //HOOK生效if(br == NO_ERROR){br = TRUE;}else{br = FALSE;}return br;
}
fatal error C1189: #error : Unknown architecture (x86, amd64, ia64, arm, arm64)
在vs中编译使用了Detours库的项目时,报上述错误。
解决方法:
在include "detours.h"之前要先包含windows.h头文件,即:
#include
#include "detours.h"
#include "detoursHookApi.h"