0

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

当两者都在没有/NXCOMPAT 的情况下编译时,它们可以很好地协同工作。但是当我/NXCOMPAT 编译两者时,我在内核空间深处得到了一个段错误。

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

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

有人知道我应该在哪里寻找原因吗?

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

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

4

1 回答 1

1

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

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

于 2015-01-07T13:15:31.147 回答