DEP(/ NXCOMPAT)在LoadLibrary中导致段错(在DllMainCRTStartup中向下)

时间:2015-01-07 00:57:55

标签: c++ segmentation-fault dep

在这种情况下,我确实拥有应用程序和dll的源代码。

如果两者都是编译而没有 / NXCOMPAT,那么它们可以很好地协同工作。但是当我使用 / NXCOMPAT编译时,我在内核空间中得到了一个段错误。

如果我使用/ NXCOMPAT编译dll,并在没有编译可执行文件的情况下,它也可以正常工作。 (我想这并不奇怪,因为可执行文件的DEP设置被强制加载的dll。)

我之前在启用DEP之后看到了MainCRTStartup中的段错误(注意:不是dll版本),这是由另一个链接器选项引起的。但是,在这种情况下,没有设置其他链接器选项,所以我知道这不是答案。

任何人都知道我应该在哪里寻找原因?

编辑:进一步的陌生感。我一直在VS 2008中的调试器中运行它,但是当我尝试在没有附加调试器的情况下运行它时,段错误就消失了。我发现这是一个非常令人不满意的解决方案,因为我仍然不知道为什么它一直在这样做。

编辑第二个:还在VS 2013 Express中的调试器中运行段错误。

1 个答案:

答案 0 :(得分:1)

缺乏代码,我们必须通过症状来猜测。我的水晶球说你正在LoadLibrary里面做的事情(即在DllMainCRTStartup内)被禁止。在LoadLibrary中有一长串禁止的内容,包括加载任何其他DLL。

请注意,您的全局对象是从DllMainCRTStartup创建的,因此也必须遵守LoadLibrary规则。