固定地址在 .NET 中占用
Fixed address is occupied in .NET
支持FIPS的OpenSSL有一个限制 - 它必须在固定地址加载libeay32.dll
,如果在任何其他地址加载,它将失败初始化检查,因此不能在FIPS模式下使用。
因此,我们根据Microsoft的建议选择了地址,并且在一些不时地址的计算机上被其他各种库占用 - 例如MSVCR120_CLR0400.dll
或mscorlib.ni.dll
或clr.dll
,您明白了。
有没有办法检查是否占用了一些固定地址+长度,并要求操作系统为我释放这部分内存,例如将这些dll变基到其他内存部分或类似的东西?
更新:
我已经从 20 个带有 ListDLL 的设备中收集了信息,并且有一些模式加载在哪里,但它远未明确定义。所以我运行了一些数学,找到了最大的间隙,在我拥有的 20 个日志中没有加载任何内容,将 libeay32 基址更改为该间隙中的某个位置(间隙比 dll 大 ~6 倍,所以我选择了 ~中间它),并且仍然经过几次尝试后,应用程序设法在 libeay32 之前在该间隙中加载了一些东西(具体来说 - clrjit.dll, 它的基址为 0x10000000,我认为这是默认值),尽管在应用程序中我尝试尽快加载 libeay32。
你为什么不结合给出的提示:
- 链接程序时,将
/INCLUDE
与libeay.dll
中的符号一起使用,以强制对该库进行静态依赖。 - 使用
/FIXED
编译libeay32.dll
,使其无法重新定位。
它是在任何托管代码运行之前加载可执行文件时加载的,而不是稍后动态加载的,因此所有这些可重定位的 dll 都还不存在,并且不会妨碍。
相关文章:
- 将数组的地址分配给变量并删除
- 空基优化子对象的地址
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 如何在c++程序中找到函数的地址
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 被解释为低级别const的const对象的地址
- 将地址分配给本地指针后,公共对象的变量将消失
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 内联程序集printf将整数解释为地址
- 为什么指针不写入类的地址?
- 如何在C++中获取该对象的类声明中对象的地址?
- 通过按地址访问变量
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 函数名是c中该函数的第一条指令的地址吗
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- ReadProcessMemory() 不适用于像 0x2840C6C68D8 这样的长地址
- 如何使用 Poco::Net::HTTPSClientSession 绑定特定的源 IP 地址
- 从IP地址获取完整的计算机名称,例如 abc.xyz.xvvx.net
- 固定地址在 .NET 中占用