У FIPS, поддерживающего OpenSSL, есть одно ограничение - он должен загружать libeay32.dll
по фиксированному адресу, а если он загружается по любому другому адресу, он не выполняет проверку инициализации, поэтому он не может использоваться в режиме FIPS.
Таким образом, мы выбрали адрес в соответствии с рекомендацией Microsoft, а на некоторых машинах, которые время от времени обращаются, заняты различными другими библиотеками - например, MSVCR120_CLR0400.dll
или mscorlib.ni.dll
или clr.dll
, вы получаете точку.
Есть ли способ проверить, если какой-либо фиксированный адрес + длина принимается, и попросить ОС освободить эту часть памяти для меня, например, переустановить эти dll на другие части памяти или что-то вроде этого?
Update:
Я собрал информацию из 20 устройств с ListDLLs, и есть некоторый шаблон, который загружается где, но он далеко не определен. Итак, я запустил некоторую математику, нашел большой пробел, где ничего не было загружено в этих 20 журналах, которые у меня были, изменил базовый адрес libeay32 где-то в этом промежутке (разрыв был ~ 6 раз больше, чем dll, поэтому я выбрал ~ в середине его), и еще после пары попыток приложение удалось загрузить что-то в этом промежутке до libeay32 (для конкретного - clrjit.dll, у него есть базовый адрес 0x10000000, который, как мне кажется, по умолчанию), хотя в приложении я пытаюсь загрузить libeay32 как можно скорее.