c# - 固定地址在.NET中被占用

标签 c# c++ .net windows dll

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

所以我们根据微软的推荐选择了地址,在一些机器上,地址时常被其他各种库占用——比如 MSVCR120_CLR0400.dllmscorlib.ni.dllclr.dll,你懂的。

有什么方法可以检查是否占用了一些固定地址 + 长度并要求操作系统为我释放那部分内存,比如将这些 dll 重新设置为其他内存部分或类似的东西?

更新:

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

最佳答案

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

  • 使用 /INCLUDE链接您的程序以强制对该库进行静态依赖时使用 libeay.dll 中的符号。
  • /FIXED 编译 libeay32.dll所以它不能重新定位。

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

关于c# - 固定地址在.NET中被占用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30974018/

相关文章:

C# 从另一个方法引用一个方法变量

c++ - 函数 try block 何时有用?

.net - 如何以编程方式将 SQL 数据类型转换为 .Net 数据类型?

c# - SQLDataReader 返回带有附加分隔符的字符串\\\\

c# - A-Star (A*) 和通用查找方法

c++ - DirectX 11 CreateSwapChain() 失败并出现错误 DXGI_ERROR_INVALID_CALL

c# - 格式化规则在类成员声明之间有空行

c# - 在 WP7 中绑定(bind) ToggleButton 的 IsChecked 属性

c# - Visual Studio 转义 Linq 语句的第三个条件

c++ - 虚保护函数错误