关于微软Detours包编译和静态链接
来源:互联网 发布:excel数据有效性来源 编辑:程序博客网 时间:2024/05/29 09:09
微软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加到我的工程中,编译,搞定。。。。。。
- 关于微软Detours包编译和静态链接
- 微软Detours链接地址
- 关于编译和链接
- 静态链接之编译和链接
- 老生常谈--关于Linux下编译和使用动态链接库静态链接库
- 关于Linux下编译和使用动态链接库静态链接库
- 编译链接和动静态库
- 编译链接和动静态库
- 编译和链接静态库动态库
- 编译和链接静态库动态库
- gcc编译动态和静态链接库
- gcc编译动态和静态链接库
- GCC编译动态和静态链接库
- 编译和链接静态库动态库
- gcc编译动态和静态链接库
- GCC编译动态和静态链接库
- gcc编译动态和静态链接库
- gcc编译动态和静态链接库
- 《自己动手写OS》勘误区
- 3295 Tautology
- 整数的二进制和16进制格式转换
- MPEG Section Filtering
- VIM快捷键:
- 关于微软Detours包编译和静态链接
- zjut 1517 Miller_Rabin
- libvlc外部api的简单整理
- 二叉树的创建,递归遍历,非递归遍历
- netbeans java 更改
- SQLServer update语句用法
- NAM中设置数据流的颜色
- 简单的Ajax类
- 关于windows自启动