在这种情况下,我确实拥有应用程序和dll的源代码。
当两者都没有/ NXCOMPAT编译时,它们可以很好地协同工作。但是当我同时使用/ NXCOMPAT进行编译时,我在内核空间中遇到了一个段错误。
如果我用/ NXCOMPAT编译dll,然后不编译可执行文件,它也可以正常工作。 (我想这并不奇怪,因为可执行文件的DEP设置被强制加载到已加载的dll上。)
启用DEP后,我以前在MainCRTStartup中看到过段错误(注意:不是dll版本),这是由另一个链接器选项引起的。但是,在这种情况下,未设置其他链接器选项,所以我知道这不是答案。
有人知道我应该在哪里寻找原因吗?
编辑:进一步的陌生感。我一直在VS 2008的调试器中运行此程序,但是当我尝试在未附加调试器的情况下运行该程序时,segfault消失了。我发现这是一个非常不令人满意的解决方案,因为我仍然不知道为什么要这么做。
编辑第二项:还可以在VS 2013 Express的调试器中运行segfaults。
最佳答案
缺少代码,我们必须根据症状进行猜测。我的水晶球说您正在禁止在LoadLibrary
内部(即在DllMainCRTStartup
内部)进行操作。在LoadLibrary
中有很多禁止的事情,包括加载任何其他DLL。
请注意,您的全局对象是从DllMainCRTStartup
创建的,因此也必须遵守LoadLibrary
规则。
关于c++ - DEP(/NXCOMPAT)在LoadLibrary中导致段错误(DllMainCRTStartup中的关闭),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27809858/