添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

detours介绍

[detours的wiki文档]( https://documentation.help/Detours/Ove_Interception.htm#:~:text=Control flow of invocation without Detours and with,function%2C and one function pointer%2C the target pointer.)

github下载后的代码目录结构如下,采用的是Makefile的形式来编译。

命令行编译

对应于Linux系统的make命令,在windows平台编译Makefile的命令为 nmake
直接打开命令行执行nmake会报错提示找不到该命令,这是因为环境变量中没有设置 nmake.exe 对应的路径。
nmake cl 等命令都是visual studio工具集的一部分,这里就需要了解如何通过命令行来进行编译。

通过命令行使用 Microsoft C++ 工具集
这里摘抄官方文档的介绍,不建议自行设置环境变量,而是建议打开已经配置好的 开发人员命令提示快捷方式
MSVC 命令行工具使用 PATH、TMP、INCLUDE、LIB 和 LIBPATH 环境变量,还使用特定于已安装工具、平台和 SDK 的其他环境变量。 即使是简单 Visual Studio 安装,也可以设置二十或更多个环境变量。 这种复杂性是强烈建议使用 开发人员命令提示符快捷方式 或 自定义命令文件之一的原因。 不建议在Windows环境中自行设置这些变量。
以vs2019举例,打开开始菜单的 developer command prompt for vs 2019 ,再次执行nmake命令,就可以发现命令可以找到了。

和普通命令行窗口的差别

官方文档中也有描述, 可在2个命令行界面执行 SET 命令,然后对比其差异, 可以看到在开发人员命令行界面中,环境变量新增了 INCLUDE LIB Windows SDK .Net Framework 等变量。

x86 or x64

默认的命令行界面是基于x86的, 切换到detours目录下执行 nmake 编译后,会发现生成的exe全部位于 bin.x86 目录下,那么如何编译x64的二进制呢?

仍然以vs2019举例, 在 xxx\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build 下,执行 vcvars64.bat .\vcvarsall.bat x64 , 就可以切换到x64的编译环境。
这里实际上脚本的调用关系为:

graph LR vcvars64.bat-->vcvarsall.bat vcvarsall.bat-->VsDevCmd.bat

VsDevCmd.bat位于 xxx\Microsoft Visual Studio\2019\Community\Common7\Tools 路径下,默认执行该脚本就类似于打开 developer command prompt for vs 2019
关于脚本之间的调用关系,这篇文档记录的比较详细深入:
记录一次在PowerShell下进入VC编译环境的探索过程

cmd or powershell

通过 developer command prompt for vs 2019 打开的cmd界面,很多命令都没有,如果能在powershell下进行命令行编译会更加方便。
通过查询其他文档,发现也是有方案的,开始菜单中打开 Developer PowerShell for VS 2019 就可以了,文档链接如下:
Visual Studio 开发人员命令提示和开发人员 PowerShell
但是这样仍然默认打开的是x86的编译环境,如何在powershell中编译x64的目标进程?文档中提到,需要升级到2022版本,就可以在powershell中打开x64的环境了。

& 'C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\Common7\Tools\Launch-VsDevShell.ps1' -Arch arm64 -HostArch amd64