前言

Detours1.5 适合于低版本的VS编译,比如2003等低版本。

如果想用VS2017/VS2019高版本开发的话,就需要  Detours4.0.1版本  了。参考编译链接

也就是低版本库+低版本编译器, 高版本库+高版本编译器。

需求:实现Detours1.5+vs2017的编译。路线一:此时需要改Detours1.5的源码,因为有些语法结构,被更新迭代了。

路线二:将Detours1.5 版本和 Detours4.0.1 版本 的函数对应上,这样,就可以看着高版本开发了。

1.5版本编译:

打开VS2017的命令窗口,以管理员身份运行。切换到src目录下,输入:nmake, 回车。

1.编译,问题一:

E:\practice\Detours1.5\Detours1.5\src\detours.cpp(92): error C2065: “cbTarget”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(96): error C2065: “cbTarget”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(104): error C2065: “cbTarget”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(112): error C2065: “cbTarget”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(117): error C2065: “cbCopy”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(117): error C2065: “cbTarget”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(120): error C2065: “cbTarget”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(120): error C2660: “detour_insert_jump”: 函数不接受 2 个参数
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(48): note: 参见“detour_insert_jump”的声明
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(123): error C2065: “cbTarget”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(125): error C2065: “cbTarget”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(176): error C2065: “cbCopy”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(404): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\string.h(133): note: 参见“strcpy”的声明
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(405): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\string.h(90): note: 参见“strcat”的声明
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(406): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\string.h(90): note: 参见“strcat”的声明
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\cl.EXE"”: 返回代码“0x2”
Stop.

1. cbTarget 改为全局变量,就可以了。原代码,仅在for循环中定义了,导致后面的使用出了问题。cbCopy的修改方法,同cbTarget

2. “detour_insert_jump”: 函数不接受 2 个参数, 这个函数中,我把两个相加的变量 用 ( ) 包起来了。

2. 编译,问题二:

E:\practice\Detours1.5\Detours1.5\src\detours.cpp(407): error C2220: 警告被视为错误 - 没有生成“object”文件
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(407): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\string.h(133): note: 参见“strcpy”的声明
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(408): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\string.h(90): note: 参见“strcat”的声明
E:\practice\Detours1.5\Detours1.5\src\detours.cpp(409): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\string.h(90): note: 参见“strcat”的声明
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\cl.EXE"”: 返回代码“0x2”
Stop.E:\practice\Detours1.5\Detours1.5\src>_CRT_SECURE_NO_WARNINGS nmake
'_CRT_SECURE_NO_WARNINGS' 不是内部或外部命令,也不是可运行的程序
或批处理文件。E:\practice\Detours1.5\Detours1.5\src>nmake _CRT_SECURE_NO_WARNINGSMicrosoft (R) 程序维护实用工具 14.16.27027.1 版
版权所有 (C) Microsoft Corporation。  保留所有权利。NMAKE : fatal error U1073: 不知道如何生成“_CRT_SECURE_NO_WARNINGS”
Stop.

1. 【detours.cpp(407): error C2220: 警告被视为错误 - 没有生成“object”文件】,这个错误,网上说:用VS打开,再保存,就能解决。 参考链接

2. 其他警告,就改为了: strcpy_s, strcat_s

3. 编译,问题三:

E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(263): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(273): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(283): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(293): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(317): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(344): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(345): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(346): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(347): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(348): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(349): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(350): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(351): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(352): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(353): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(354): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(355): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(356): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(357): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(358): error C3867: “CDetourDis::CopyBytes”: 非标准语法;请使用 "&" 来创建指向成员的指针
E:\practice\Detours1.5\Detours1.5\src\disasm.cpp(359): error C3867: “CDetourDis::Copy0F”: 非标准语法;请使用 "&" 来创建指向成员的指针

这个问题比较难,对源码得进行比较大的改动。原理可以参看这几个链接:

https://blog.csdn.net/qq_44664843/article/details/112908247

https://blog.csdn.net/sysleo/article/details/96320261

https://www.cnblogs.com/blog-vincent-0x1F7/p/9668533.html

实操更改(不保证对,反正这个错误已经不显示了),一共更改2处:添加&和类作用域;对成员添加static

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------

4. 编译,问题四:

E:\practice\Detours1.5\Detours1.5\src\image.cpp(1644): error C2065: “n”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\image.cpp(1645): error C2065: “n”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\image.cpp(1646): error C2065: “n”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\image.cpp(1647): error C2065: “n”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\image.cpp(1648): error C2065: “n”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\image.cpp(1649): error C2065: “n”: 未声明的标识符
E:\practice\Detours1.5\Detours1.5\src\image.cpp(1650): error C2065: “n”: 未声明的标识符

还是因为定义的问题,更改一下变量的作用范围。

5, 编译,问题五:

E:\practice\Detours1.5\Detours1.5\src\image.cpp(585): error C2220: 警告被视为错误 - 没有生成“object”文件

又绕回到了这个问题,是编译环境【将警告变为了错误】,所以编译不错去。继续修改makefile, 添加 /WX-, 取消【将警告变为错误】即可。原理链接。

经过5步骤的修改,最终编译结果提示如下:

E:\practice\Detours1.5\Detours1.5\src>nmake -f makefileMicrosoft (R) 程序维护实用工具 14.16.27027.1 版
版权所有 (C) Microsoft Corporation。  保留所有权利。if not exist "..\include" mkdir "..\include"if not exist "..\lib" mkdir "..\lib"
cl: 命令行 warning D9025 :正在重写“/WX”(用“/WX-”)
cl: 命令行 warning D9035 :“Gi-”选项已否决,并将在将来的版本中移除
cl: 命令行 warning D9035 :“O”选项已否决,并将在将来的版本中移除
image.cpp
E:\practice\Detours1.5\Detours1.5\src\image.cpp(585): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\string.h(133): note: 参见“strcpy”的声明
E:\practice\Detours1.5\Detours1.5\src\image.cpp(608): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\string.h(133): note: 参见“strcpy”的声明
E:\practice\Detours1.5\Detours1.5\src\image.cpp(1070): warning C4456: “rvaName”的声明隐藏了上一个本地声明
E:\practice\Detours1.5\Detours1.5\src\image.cpp(994): note: 参见“rvaName”的声明
E:\practice\Detours1.5\Detours1.5\src\image.cpp(1582): warning C4456: “n”的声明隐藏了上一个本地声明
E:\practice\Detours1.5\Detours1.5\src\image.cpp(1432): note: 参见“n”的声明
E:\practice\Detours1.5\Detours1.5\src\image.cpp(1679): warning C4456: “n”的声明隐藏了上一个本地声明
E:\practice\Detours1.5\Detours1.5\src\image.cpp(1432): note: 参见“n”的声明
E:\practice\Detours1.5\Detours1.5\src\image.cpp(1498): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\string.h(133): note: 参见“strcpy”的声明
cl: 命令行 warning D9025 :正在重写“/WX”(用“/WX-”)
cl: 命令行 warning D9035 :“Gi-”选项已否决,并将在将来的版本中移除
cl: 命令行 warning D9035 :“O”选项已否决,并将在将来的版本中移除
firstexc.cpp
e:\practice\detours1.5\detours1.5\src\firstexc.cpp(60) : warning C4733: 内联 asm 分配到“FS:0”: 处理程序未注册为安全处理程序
cl: 命令行 warning D9025 :正在重写“/WX”(用“/WX-”)
cl: 命令行 warning D9035 :“Gi-”选项已否决,并将在将来的版本中移除
cl: 命令行 warning D9035 :“O”选项已否决,并将在将来的版本中移除
creatwth.cpplib /debugtype:cv /nologo /out:"..\lib\detours.lib" detours.obj  disasm.obj      image.obj        firstexc.obj   creatwth.obj
Microsoft (R) Library Manager Version 14.16.27027.1
Copyright (C) Microsoft Corporation.  All rights reserved.LINK : warning LNK4044: 无法识别的选项“/debugtype:cv”;已忽略copy detours.h "..\include\detours.h"
已复制         1 个文件。bscmake /v /n /o detours.bsc detours.sbr         disasm.sbr      image.sbr        firstexc.sbr   creatwth.sbr
Microsoft(R) 浏览信息维护实用工具 Version 14.16.27027
Copyright (C) Microsoft Corporation. All rights reserved.Processing: detours.sbr ..
Processing: disasm.sbr ..
Processing: image.sbr ..
Processing: firstexc.sbr ..
Processing: creatwth.sbr ..
Processing: SBR files all processed -- building .bsc ..E:\practice\Detours1.5\Detours1.5\src>

最终文件编译出:

VS2017编译Detours1.5相关推荐

  1. vs2015编译linux源码,使用Visual Studio 2017(VS2017)编译OpenCC 1.0.4 (Open Chinese Convert)源代码...

    摘要:本文介绍了Win7 64位环境下OpenCC(Open Chinese Convert) 1.0.4源码编译全过程,除VS2017外,VS2013以上版本也应该基本同样适用,其他版本的Windo ...

  2. Windows10上使用VS2017编译MXNet源码操作步骤(C++)

    MXNet是一种开源的深度学习框架,核心代码是由C++实现.MXNet官网推荐使用VS2015或VS2017编译,因为源码中使用了一些C++14的特性,VS2013是不支持的.这里通过VS2017编译 ...

  3. windows 平台使用 VS2017 编译 libevent 源码

    一 依赖库编译 先要将其依赖的库编译好,其中openssl需要编译到libevent中,编译成libevent_openssl.lib库,zlib在新版本中只有示例用到. 1)windows 平台使用 ...

  4. vs2017运行显示系统找不到指定的文件_windows 平台使用 VS2017 编译 libevent 源码

    一 依赖库编译 先要将其依赖的库编译好,其中openssl需要编译到libevent中,编译成libevent_openssl.lib库,zlib在新版本中只有示例用到. 1)windows 平台使用 ...

  5. 使用VS2017编译sqlite和在VS2017中配置使用sqlite的简单例子演示

    转自:http://blog.csdn.net/hyxiaohaiyang/article/details/7382551 知识补充: sqlite3.dll动态链接库,它允许程序共享执行特殊任务所必 ...

  6. vs2017运行yolov4_YOLOv4 C vs2017 编译

    目录 先感谢yolov4的贡献者们 1.下载darknet源码 2.安装好CUDA.CUDNN和opencv CUDA:10.0 CUDNN:7.4.1 opencv:3.4.2 或者4.3.0版本都 ...

  7. 关于VS2017编译UE4项目,输出窗口有乱码的解决方案

    关于VS2017编译UE4项目,输出窗口有乱码的解决方案 参考文章: (1)关于VS2017编译UE4项目,输出窗口有乱码的解决方案 (2)https://www.cnblogs.com/ZhengJ ...

  8. win10 VS2017编译Audacity详细教程

    win10 VS2017编译Audacity详细教程 安装Visual Studio2017和git,这里不详细叙述,网上很多教程. 配置wxWidgets a.官网下载地址http://www.wx ...

  9. 解读帖子:结构化编译器前端 Clang 介绍(VS2017编译clang)

    因为需要提取出头文件或源文件的函数名列表和相应的函数参数类型,我想从已有的编译器中寻找函数调用,于是我找到了--结构化编译器前端 Clang 介绍 这个贴子折腾了我很久(还有几个开源项目我也没有搞定) ...

  10. vs2017编译iconv

    本人目前在windows下使用ffmpeg,需要添加fontconfig,而fontconfig依赖iconv:故而需要用vs2017编译iconv静态库,64位版本. 本人参考了博客:windows ...

最新文章

  1. clientHeight , scrollHeight , offsetHeight之间的区别及兼容方案
  2. LeetCode Decode String(栈和递归)
  3. [转]关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决...
  4. 【计算机网络】网络安全 : 运输层安全协议 ( 安全套接字层 SSL | 运输层安全 TSL | SSL 服务 | SSL 安全会话建立流程 )
  5. [PLM专题] 十分钟了解文本分类通用训练技巧
  6. IE下常见兼容性问题记录汇总(04-持续更新)
  7. bash shell 循环读入每一行(转)
  8. PyQt5-高级控件使用(QTableView)
  9. 小D课堂 - 新版本微服务springcloud+Docker教程_3-04 SpringCloud微服务核心组件Eureka介绍和闭源后影响...
  10. paip.mysql error2003 Can''t connect to MySQL server on localhost (10061)的解决
  11. CAD绘图的规范要点
  12. avr单片机c语言大小比较,AVR单片机C语言入门知识
  13. 一款秒杀wireshark和burpsuite的国产网络分析神器,你还没用过?
  14. Python批量爬取堆糖网图片
  15. 老男孩Day1作业(二):三级菜单
  16. [渝粤教育] 西南科技大学 高级英语(1) 在线考试复习资料
  17. Vivado IP核之浮点数加减法 Floating-point
  18. 学习搜狗workflow心路历程(1)Windows版本的环境搭建
  19. 清华园那沁人心脾的秋天
  20. iPhone预计移除SIM卡槽,用户需通过eSIM激活网络

热门文章

  1. FileSplit.exe
  2. 闪迪tf卡量产工具_Tony哥的自修室:相机SD卡摔碎角,钣金喷漆技术活复原一波...
  3. 第一次跳槽总结(产品经理,简历面试)
  4. 数字 显示为LED 字体
  5. 【面包板电子制作130例仿真】简单变调电子门铃
  6. Unity DOTween插件和iTween插件使用(笔记)
  7. android基于xposed框架,学习笔记:Android Xposed 框架入门
  8. Python 代码加密方法总结
  9. Linux基本操作(实训一)
  10. DTCC 年度最佳创新产品丨真正的 HTAP 数据库是怎样炼成的?