固定地址在.NET中占用

时间:2015-06-22 07:15:42

标签: c# c++ .net windows dll

支持FIPS的OpenSSL有一个限制 - 它必须在固定地址加载libeay32.dll,如果在任何其他地址加载,它将无法进行初始化检查,因此无法在FIPS模式下使用。

因此,我们根据Microsoft的推荐选择了地址,并且在某些机器上不时会被其他各种库占用 - 例如MSVCR120_CLR0400.dllmscorlib.ni.dllclr.dll ,你明白了。

有没有办法检查是否有一些固定的地址+长度,并要求操作系统为我释放那部分内存,比如将这些dll转换为其他内存部分或类似内容?

更新

我从使用ListDLL的20个设备中收集了信息,并且有一些模式在哪里加载,但它远未定义明确。所以我运行了一些数学运算,找到了最大的差距,在我拥有的20个日志中没有加载任何内容,将libeay32基地址更改为该差距中的某个位置(间隙比dll大6倍,所以我&#39已经选择〜中间了)仍然在几次尝试之后应用程序设法在libeay32之前加载了一些东西(具体来说 - clrjit.dll,它的基地址为0x10000000,我认为是默认的),虽然在应用程序中我尝试尽快加载libeay32。

1 个答案:

答案 0 :(得分:1)

为什么不结合给出的提示:

  • 在链接程序时使用/INCLUDElibeay.dll符号来强制对该库进行静态依赖。
  • 使用/FIXED编译libeay32.dll,以便无法重新定位。

因此,它在加载可执行文件时加载,在任何托管代码运行之前,而不是以后动态,所以所有那些可重定位的dll还没有,不能阻碍。