在.NET中占用固定的地址

FIPS能力OpenSSL有一个限制 – 它必须加载libeay32.dll在固定的地址,如果加载在任何其他地址,它没有初始化检查,所以它不能用于FIPS模式。

所以我们根据微软的build议select地址,并且在一些不时被其他地址库占用的机器上 – 比如MSVCR120_CLR0400.dll或者mscorlib.ni.dll或者clr.dll ,你就明白了。

有没有什么办法来检查是否采取了一些固定的地址+长度,并要求操作系统释放我的这部分内存,如重新启动这些DLL到其他内存部分或类似的东西?

更新:

我从ListDLLs的20个设备收集信息,有什么样的模式加载在哪里,但它远远没有明确的定义。 所以我跑了一些math,find了最大的差距,在那20个日志中没有加载任何东西,把libeay32的基地址改成那个差距的某个地方(差距比dll大6倍,所以我select了〜它的中间),仍然在几次尝试应用程序之前设法加载一些东西在libeay32之前的空白(具体 – clrjit.dll,它有0x10000000,我认为是默认的基地址),虽然在应用程序中,我尝试加载libeay32尽快地。

Solutions Collecting From Web of "在.NET中占用固定的地址"

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

  • 使用/INCLUDElibeay.dll一个符号链接你的程序,强制该库的静态依赖。
  • 使用/FIXED编译libeay32.dll ,因此无法重新定位。

因此,它在加载可执行文件时加载,在任何托管代码运行之前,不会在以后动态执行,因此所有可重定位的dll都不存在, 并且不能妨碍。