【发布时间】:2015-06-22 07:15:42
【问题描述】:
支持 FIPS 的 OpenSSL 有一个限制 - 它必须在固定地址加载 libeay32.dll,如果在任何其他地址加载,初始化检查失败,因此不能在 FIPS 模式下使用。
所以我们根据微软的建议选择了地址,并且在一些机器上,地址不时被其他各种库占用——比如MSVCR120_CLR0400.dll或mscorlib.ni.dll或clr.dll,你明白了。
有什么方法可以检查是否占用了某个固定地址 + 长度并要求操作系统为我释放那部分内存,比如将这些 dll 重新设置为其他内存部分或类似的东西?
更新:
我从 20 个使用 ListDLLs 的设备收集了信息,并且有一些模式加载到哪里,但它远未明确定义。所以我进行了一些数学运算,发现最大的差距,在我拥有的那 20 条日志中没有加载任何内容,将 libeay32 基地址更改为该差距中的某个地方(差距比 dll 大约 6 倍,所以我选择了~中间)并且仍然在几个尝试之后应用程序设法在 libeay32 之前的那个间隙中加载一些东西(具体来说 - clrjit.dll,它的基地址为 0x10000000,我认为这是默认的),尽管在应用程序中我尝试加载 libeay32尽快。
【问题讨论】:
-
这个问题是在 openssl 的邮件列表中提出的:groups.google.com/forum/#!topic/mailing.openssl.users/…。使用 /FIXED 重新编译 dll 或将地址放入 0x50000000 到 0x6FFF0000 的可能解决方案
-
我使用那个空间的地址,它改善了情况,但没有完全解决。我使用 0x64880000 作为 libeay32.dll 的固定地址。
-
@xanatos - OpenSSL 安全策略是否允许您按照 Bohm 的建议更改地址?我认为你应该寻找 Steve Marquess 或 Dr. Henson 的答案。