在win7 64bit + vs2008 + sdk v7.0的环境下编译Detours

关于Detours的官方介绍,请参见这里


现在已经有3.0版了,但是要收费,所以基本上大家还在使用2.1。下载地址


Detours在通常环境下的编译比较简单,但在64位操作系统下稍微麻烦些。而且很多博文中描述的方法是错误的。

这篇国外的博文很好,详细描述可能出现的问题,以及解决方案。

虽然有了解决办法,但并不全面,samples/traceapi/_win32.cpp 里仍然报错,而且人工操作的步骤较多。

我做了一个编译的批处理,并把两个需要修改的代码修改好,打了包放在这里。使用起来非常方便。0资源分,欢迎大家下载。


使用方法:

  1. 将下载得到的rar解压;
  2. symtest.cpp覆盖samples/findfunc/symtest.cpp
  3. 用_win32.cpp覆盖samples/findfunc/_win32.cpp
  4. 编辑build.bat,把vs和sdk的路径根据实际情况更改为自己机器上的本地路径。
  5. 将build.bat复制到Detours根目录,在Visual Studio 2008 Command Prompt中执行build。
  6. 结束后,在Detours根目录产生了bin、include、lib三个文件夹,就可以使用Detours了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Detours 是一个用于 Windows 操作系统的库,可以实现在运行时修改应用程序的代码,从而监控其行为。下面是一个使用 Detours 监控文件是否被修改的示例代码: ```cpp #include <windows.h> #include <detours.h> // 定义原始函数指针类型 typedef BOOL(WINAPI *PFN_CreateFileW)(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); // 定义全局变量存储原始函数指针 static PFN_CreateFileW s_pfnCreateFileW = CreateFileW; // Hook 函数 BOOL WINAPI MyCreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) { // 调用原始函数 HANDLE hFile = s_pfnCreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); // 判断文件是否被锁定 if (GetLastError() == ERROR_SHARING_VIOLATION) { // 监控文件是否被修改 while (true) { DWORD dwResult = WaitForSingleObject(hFile, 1000); // 等待 1 秒钟 if (dwResult == WAIT_OBJECT_0) // 文件已解锁 { break; } else if (dwResult == WAIT_TIMEOUT) // 文件仍然被锁定 { DWORD dwSize = GetFileSize(hFile, NULL); LPBYTE pBuffer = new BYTE[dwSize]; DWORD dwBytesRead = 0; if (ReadFile(hFile, pBuffer, dwSize, &dwBytesRead, NULL)) { // 文件内容被修改,处理代码 // ... } delete[] pBuffer; } else // 其他错误 { break; } } } return hFile; } int main() { // Hook 函数 DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach(&(PVOID&)s_pfnCreateFileW, MyCreateFileW); DetourTransactionCommit(); // 调用原始函数 HANDLE hFile = CreateFileW(L"C:\\test.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // 恢复原始函数 DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourDetach(&(PVOID&)s_pfnCreateFileW, MyCreateFileW); DetourTransactionCommit(); return 0; } ``` 以上代码中,我们使用 Detours 对 `CreateFileW` 函数进行 Hook,当文件被锁定时,我们不断地等待文件解锁,并监控文件是否被修改。如果文件被修改,我们可以在相应的位置添加处理代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值