使用 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。甚至 new 和 delete 运算符都未定义,这表明您根本不链接 CRT。使用 MSVC 编译器时很难做到。如果没有帮助,请记录您如何构建它。
【讨论】:
好吧,我使用 nmake (visual cpp) 来构建它,但我使用的是 code::blocks,因为我不太喜欢 msvc...另外,如果我注释掉包含"detours.h" 和所有 detours 函数调用,它构建得很好。 嗯,我的意思是我使用 nmake 来构建 detours 代码,但我正在使用 code::blocks 和 mingw 来构建我的项目。不,所有其他 Windows api 调用编译和运行都很好...... 混合搭配无法使用。使用相同的工具构建一切。 我会说它比new
和 delete
丢失更糟糕 - 你可以通过编译为 C 来跳过它(从技术上讲,代码是 C++,因为 PVOID&
但这只是简单地重写)。但是,安全 cookie 和 SE 处理更为基础。 MSVC 也使用 C 中的那些。
@Gogeta70:“所有其他 Windows api 调用都编译得很好” - 你在“其他”部分弄错了。这些缺失的函数不是 Windows API 的一部分,它们是 MSVC 的 CRT 库的一部分。【参考方案2】:
检查您的编译器及其选项。你应该使用和 detours 一样的构建方式。可能您应该在编译器代码生成设置中设置 /EHa 和 /GS。
【讨论】:
以上是关于使用 Microsoft Detours - 一堆未定义的的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Detours 如何工作以及如何使用它来获取堆栈跟踪?