使用 Microsoft Detours - 一堆未定义的

Posted

技术标签:

【中文标题】使用 Microsoft Detours - 一堆未定义的【英文标题】:Using Microsoft Detours - bunch of undefined's 【发布时间】:2010-11-08 09:24:43 【问题描述】:

我尝试在 google 上搜索编译器错误,但它甚至没有返回搜索结果。所以,我在这里有点迷路了。我刚刚下载了 microsoft detours,构建了它并从中获取了 detours.h、detours.lib、detoured.lib 和 detoured.dll 文件。然后,尝试在我自己的项目中使用它,我收到以下错误:

http://friendpaste.com/4egvgn7lOeIVOGkbROCnOC

那是源代码,底部是编译器错误。如果有人可以澄清导致这些问题的原因,那将很有帮助。谢谢! ^_^

【问题讨论】:

【参考方案1】:

它们不是编译器错误,而是链接器错误。您构建它的方式非常糟糕,您正在链接错误版本的 CRT。甚至 newdelete 运算符都未定义,这表明您根本不链接 CRT。使用 MSVC 编译器时很难做到。如果没有帮助,请记录您如何构建它。

【讨论】:

好吧,我使用 nmake (visual cpp) 来构建它,但我使用的是 code::blocks,因为我不太喜欢 msvc...另外,如果我注释掉包含"detours.h" 和所有 detours 函数调用,它构建得很好。 嗯,我的意思是我使用 nmake 来构建 detours 代码,但我正在使用 code::blocks 和 mingw 来构建我的项目。不,所有其他 Windows api 调用编译和运行都很好...... 混合搭配无法使用。使用相同的工具构建一切。 我会说它比 newdelete 丢失更糟糕 - 你可以通过编译为 C 来跳过它(从技术上讲,代码是 C++,因为 PVOID& 但这只是简单地重写)。但是,安全 cookie 和 SE 处理更为基础。 MSVC 也使用 C 中的那些。 @Gogeta70:“所有其他 Windows api 调用都编译得很好” - 你在“其他”部分弄错了。这些缺失的函数不是 Windows API 的一部分,它们是 MSVC 的 CRT 库的一部分。【参考方案2】:

检查您的编译器及其选项。你应该使用和 detours 一样的构建方式。可能您应该在编译器代码生成设置中设置 /EHa 和 /GS。

【讨论】:

以上是关于使用 Microsoft Detours - 一堆未定义的的主要内容,如果未能解决你的问题,请参考以下文章

构建 32 位 Detours 库

Microsoft Detours 如何工作以及如何使用它来获取堆栈跟踪?

可以使用 Microsoft Detours 来挂钩系统范围的调用而不注入每个 proc 吗?

Microsoft Detours 2.1简介

C/C++ Detours 库 - 在哪里可以找到?

Detours简介 (拦截x86机器上的任意的win32 API函数)