`
qq1113130712
  • 浏览: 7480 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于微软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源码:

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

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

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

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

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

    2、注释掉:

 

    3、注释掉:

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

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

        return GetModuleHandle(NULL);

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics