У FIPS, поддерживающего OpenSSL, есть одно ограничение - он должен загружать libeay32.dll
по фиксированному адресу, и если он загружается по любому другому адресу, он не выполняет проверку инициализации, поэтому он не может использоваться в режиме FIPS.Фиксированный адрес занят в .NET.
Итак, мы выбрали адрес в соответствии с рекомендациями Microsoft, а на некоторых машинах, которые касаются время от времени занимают различные другие библиотеки - как MSVCR120_CLR0400.dll
или mscorlib.ni.dll
или clr.dll
, вы получите точку.
Есть ли способ проверить, если какой-либо фиксированный адрес + длина берется, и попросить ОС освободить эту часть памяти для меня, например, переустановить эти dll на другие части памяти или что-то вроде этого?
Update:
Я собрал информацию из 20 устройств с ListDLLs и есть некоторый шаблон, что загружается, где, но это далеко не определен. Итак, я запустил некоторую математику, нашел большой пробел, где ничего не было загружено в этих 20 журналах, которые у меня были, изменил базовый адрес libeay32 где-то в этом промежутке (разрыв был ~ 6 раз больше, чем dll, поэтому я выбрал ~ в середине его), и еще после пары попыток приложение удалось загрузить что-то в этом промежутке до libeay32 (для конкретного - clrjit.dll, у него есть базовый адрес 0x10000000, который, как мне кажется, по умолчанию), хотя в приложении я пытаюсь загрузить libeay32 как можно быстрее.
Этот вопрос задан в списке рассылки openssl: https://groups.google.com/forum/#!topic/mailing.openssl.users/LviBi6rhLIU. Возможные решения, в которых перекомпилировать dll с помощью/FIXED или поместить адрес в * 0x50000000 в 0x6FFF0000 * – xanatos
Я использую адрес из этого пространства, это улучшило ситуацию, но не решило его полностью. Я использовал 0x64880000 как фиксированный адрес для libeay32.dll. – Giedrius
@xanatos - позволяет ли политика безопасности OpenSSL изменить адрес, предложенный Бомом? Я думаю, вы должны искать ответ от Стива Маркеса или доктора Хенсона. – jww