支持 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尽快。
最佳答案
你为什么不结合给出的提示:
因此,它是在加载可执行文件时加载的,在任何托管代码运行之前,而不是稍后动态加载,因此所有那些可重定位的 dll 还不存在,并且不能妨碍。
关于c# - 固定地址在.NET中被占用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30974018/