我正在重新组织应用程序中的一些遗留库 有非托管代码调用托管代码库。虽然我有代码 重新组织,它会产生以下加载程序错误:
...
'app.exe': Loaded 'C:\WINDOWS\system32\CsDisp.dll'
'app.exe': Loaded 'C:\WINDOWS\system32\psapi.dll'
'app.exe': Loaded 'C:\WINDOWS\system32\shell32.dll'
'app.exe': Loaded 'C:\appCode\Debug\daq206_32.dll', Binary was not built with debug information.
'app.exe': Loaded 'C:\appCode\Debug\SiUSBXp.dll', Binary was not built with debug information.
'app.exe': Loaded 'C:\appCode\Debug\AdlinkDAQ.dll', Symbols loaded.
'app.exe': Loaded 'C:\WINDOWS\system32\P9842.dll', Binary was not built with debug information.
LDR: LdrRelocateImageWithBias() failed 0xc0000018
LDR: OldBase : 10000000
LDR: NewBase : 00A80000
LDR: Diff : 0x7c90d6fa0012f6cc
LDR: NextOffset : 00000000
LDR: *NextOffset : 0x0
LDR: SizeOfBlock : 0xa80000
Debugger:: An unhandled non-continuable exception was thrown during process load
我相信0xc0000018错误是一个重叠的地址范围。所以,我有两个问题。首先,哪些链接器选项可能会导致此错误?我目前正在使用/ DYNAMICBASE链接:NO和/ FIXED:否,因为这是以前的一些库的设置方式。
第二,有没有办法打开加载器的详细模式,这样我才能看到它究竟要加载什么? P9842是第三方库,所以我想它是在P9842之后进入我的一个库并且在那个库中失败了。我可以缩小它吗?感谢。
答案 0 :(得分:1)
不知道第一个问题。搜索该状态代码hit this article with the interesting note“在XP之前没有检查Windows中的页面映射与不同的内存类型.Windows XP确实检查。第二次内存类型映射尝试将失败,STATUS_CONFLICTING_ADDRESSES(0xc0000018)错误信息。”如果您正在使用MapViewOfFile,那么可能是相关的......
对于第二个问题,您希望看到加载程序快照。见this article at msdn。这个命令应该有帮助: “gflags -i yourApp.exe + sls”