gpt4 book ai didi

c++ - 如果 exe 静态链接到不同的 msvcr,导入的 DLL 函数是否会调用错误的函数版本?

转载 作者:行者123 更新时间:2023-11-30 05:39:00 29 4
gpt4 key购买 nike

我有一个奇怪的问题,我正试图为某人解决。我无权访问代码。有一个加载 DLL 的程序并具有某种插件框架。除了如何从 DLL 中导入函数以及用于导出的调用约定之外,它们几乎没有提供任何文档。

此人的插件从 DLL 导入函数(假设他们使用了正确的调用约定并正确导入)。它会定期遇到访问冲突(通常是从 0x0000000 写入/读取访问冲突)。有时,它会使程序崩溃,并且事件查看器显示异常代码 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 静态链接,因此无法可靠地插入。反调试器代码非常愚蠢;有几种解决方法。如果您已付款,请将其退回并要求退款。

关于c++ - 如果 exe 静态链接到不同的 msvcr,导入的 DLL 函数是否会调用错误的函数版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32533823/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com