关于微软Detours包编译和静态链接

微软Detours库可以从:http://ftp.research.microsoft.com/downloads/d36340fb-4d3c-4ddd-bf5b-1db25d03713d/DetoursExpress.msi? 下载到,现在的最新版本应该是2.1版本。

只说两点卡过我的地方:

1、如何编译。

网上一般的解释是只要安装过VC或者VS的计算机,在detours的src目录下使用nmake就可以成功编译。我想,这样实验的人可能会有不少会得到这么一句话:nmake不是内部命令,也不是外部命令。。。这是因为VS(仅限2008,其它版本不清楚)安装后,并没有将nmake所在的bin目录添加到环境变量中。这个好解决,在执行的时候使用全路径或者干脆就把nmake拷贝到detours的src目录中行不行?实验了下,果然可以,nmake是跑起了,但是碰到rc detoured.rc的时候,又会报个错误出来:rc 不是内部命令也不是外部命令。明显,rc.exe又找不到了。。。。

rc.exe在哪里嘞?默认情况下应该是在C:/Program Files/Microsoft SDKs/Windows/v6.0A/bin下。。若继续将该路径加为环境变量,就好了。。所幸的是微软提供了一个添加环境变量的批处理,可以直接使用和nmake.exe在同一文件夹下的vcvars32.bat。由此得到,完整编译的方法如下:

1、cmd下定位到detours下src文件夹里面。

2、执行vcvars32.bat批处理,可以使用全路径,但是执行过后切记不要关闭cmd(批处理添加环境变量为临时环境变量,关掉cmd窗体即失效)。

  3、nmake。。。

这样应该就可以完成编译了。。。至少我完成了。。。

2、如何静态引用

如果按常规的办法来引入库的话,在生成的文件中,都会引入一个叫detoured的库。如何才能去除这个库呢?微软给出的资料中看了半天也没有看懂。。。

网上有人说是,不要引入detoured的lib文件。可是不引用的话,就会报一个大大的链接错误——找不到一个叫detoured的函数。

网上有人说要修改一下detours.cpp文件,但是又没有几个人给出修改的方法(或许我查找的办法不对,有人说网上资料很多,可我就是没找到)。看一看detoured都做了些什么:

detoured源码:
static HMODULE s_hDll; HMODULE WINAPI Detoured() { return s_hDll; } BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved) { (void)reserved; if (dwReason == DLL_PROCESS_ATTACH) { s_hDll = hinst; DisableThreadLibraryCalls(hinst); } return TRUE; }

可以看出这个函数只是返回了一个HMODULE。DisableThreadLibraryCalls也是没什么用处。

微软官方帮助中给出的解释是:这是一个标志,如果你使用了detours库。。。。。(无语)

看了看detours的源代码,又测试了下,发现修改这几个地方,就可以达到目的:

一下都是在src/detours.cpp文件中:

    1、注释掉:#include "detoured.h"

    2、注释掉:

        #ifdef DETOURS_INTERNAL_USAGE         #error Feature not supported in this release.         #else            Detoured();         #endif

    3、注释掉:

        #ifdef DETOURS_INTERNAL_USAGE         #error Feature not supported in this release.         #else          return Detoured();         #endif

        (上面这一段在DetourGetDetouredMarker函数中。)

        另外还要再返回一个HMODULE,就返回当前的:

        return GetModuleHandle(NULL);

编译,把生成的detours.lib加到我的工程中,编译,搞定。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值