在这种情况下,我确实拥有应用程序和dll的源代码。
如果两者都是编译而没有 / NXCOMPAT,那么它们可以很好地协同工作。但是当我使用 / NXCOMPAT编译时,我在内核空间中得到了一个段错误。
如果我使用/ NXCOMPAT编译dll,并在没有编译可执行文件的情况下,它也可以正常工作。 (我想这并不奇怪,因为可执行文件的DEP设置被强制加载的dll。)
我之前在启用DEP之后看到了MainCRTStartup中的段错误(注意:不是dll版本),这是由另一个链接器选项引起的。但是,在这种情况下,没有设置其他链接器选项,所以我知道这不是答案。
任何人都知道我应该在哪里寻找原因?
编辑:进一步的陌生感。我一直在VS 2008中的调试器中运行它,但是当我尝试在没有附加调试器的情况下运行它时,段错误就消失了。我发现这是一个非常令人不满意的解决方案,因为我仍然不知道为什么它一直在这样做。编辑第二个:还在VS 2013 Express中的调试器中运行段错误。
答案 0 :(得分:1)
缺乏代码,我们必须通过症状来猜测。我的水晶球说你正在LoadLibrary
里面做的事情(即在DllMainCRTStartup
内)被禁止。在LoadLibrary
中有一长串禁止的内容,包括加载任何其他DLL。
请注意,您的全局对象是从DllMainCRTStartup
创建的,因此也必须遵守LoadLibrary
规则。