如果 exe 静态链接到不同的 msvcr,导入的 DLL 函数是否会调用错误的函数版本?
Could imported DLL functions be calling the wrong function versions if the exe statically links to a different msvcr?
我有一个奇怪的问题,我正试图为某人解决。我无权访问代码。有一个加载 DLL 的程序并具有某种插件框架。除了如何从 DLL 中导入函数以及用于导出的调用约定之外,它们几乎没有提供任何文档。
此人的插件从 DLL 导入函数(假设他们使用了正确的调用约定并正确导入)。它会定期遇到访问冲突(通常是从 0x0000000 开始的访问冲突 write/read)。有时,它会使程序崩溃,并且事件查看器显示异常代码 0xc0000005(另一个访问冲突)和错误模块 SHLWAPI.dll.
使用 depends,我确定该程序静态链接到 msvcr。我发现插件 DLL 动态链接到 msvcr120.dll.
是的,我知道这只是自讨苦吃,访问冲突不足为奇,但不幸的是,我不得不处理别人的问题。
无论如何,我的问题是:
假设是从此 DLL 导入的,内部是对 msvcr120 提供的函数的调用。当程序调用 imported 时,它是否可能从静态链接到的 msvcr 而不是从 msvcr120 调用?
我知道这可能取决于主程序的插件框架,但是一般的反馈将不胜感激。
提前致谢!
在一个程序中使用多个 CRT 副本时存在已知问题,即使它们都使用相同版本的 CRT(请参阅 Potential Errors Passing CRT Objects Across DLL Boundaries)。如果CRT是不同版本的,由于内部结构的大小或布局不同,还会出现很多其他问题。
由于您使用的程序与 CRT 静态链接,因此无法可靠地插入。反调试器代码非常愚蠢;有几种解决方法。如果您已付款,请将其退回并要求退款。
我有一个奇怪的问题,我正试图为某人解决。我无权访问代码。有一个加载 DLL 的程序并具有某种插件框架。除了如何从 DLL 中导入函数以及用于导出的调用约定之外,它们几乎没有提供任何文档。
此人的插件从 DLL 导入函数(假设他们使用了正确的调用约定并正确导入)。它会定期遇到访问冲突(通常是从 0x0000000 开始的访问冲突 write/read)。有时,它会使程序崩溃,并且事件查看器显示异常代码 0xc0000005(另一个访问冲突)和错误模块 SHLWAPI.dll.
使用 depends,我确定该程序静态链接到 msvcr。我发现插件 DLL 动态链接到 msvcr120.dll.
是的,我知道这只是自讨苦吃,访问冲突不足为奇,但不幸的是,我不得不处理别人的问题。
无论如何,我的问题是: 假设是从此 DLL 导入的,内部是对 msvcr120 提供的函数的调用。当程序调用 imported 时,它是否可能从静态链接到的 msvcr 而不是从 msvcr120 调用?
我知道这可能取决于主程序的插件框架,但是一般的反馈将不胜感激。
提前致谢!
在一个程序中使用多个 CRT 副本时存在已知问题,即使它们都使用相同版本的 CRT(请参阅 Potential Errors Passing CRT Objects Across DLL Boundaries)。如果CRT是不同版本的,由于内部结构的大小或布局不同,还会出现很多其他问题。
由于您使用的程序与 CRT 静态链接,因此无法可靠地插入。反调试器代码非常愚蠢;有几种解决方法。如果您已付款,请将其退回并要求退款。