2015-06-22 2 views
13

У 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 как можно быстрее.

+1

Этот вопрос задан в списке рассылки openssl: https://groups.google.com/forum/#!topic/mailing.openssl.users/LviBi6rhLIU. Возможные решения, в которых перекомпилировать dll с помощью/FIXED или поместить адрес в * 0x50000000 в 0x6FFF0000 * – xanatos

+0

Я использую адрес из этого пространства, это улучшило ситуацию, но не решило его полностью. Я использовал 0x64880000 как фиксированный адрес для libeay32.dll. – Giedrius

+0

@xanatos - позволяет ли политика безопасности OpenSSL изменить адрес, предложенный Бомом? Я думаю, вы должны искать ответ от Стива Маркеса или доктора Хенсона. – jww

ответ

1

Почему вы не совместить намеки данные:

  • Используйте /INCLUDE с символом из libeay.dll при компоновке вашей программы, чтобы заставить статическую зависимость от этой библиотеки.
  • Компиляция libeay32.dll с /FIXED поэтому он не может быть перемещенным.

Таким образом, он будет загружен на загрузку исполняемого файла, прежде чем любой управляемый код бежит, а не когда-нибудь потом динамически, так что все эти перемещаемые библиотеки являются не там и не может получить в пути.

+0

Я не мог найти/ВКЛЮЧИТЬ параметр для msbuild, я думаю, он недоступен для .NET? – Giedrius

+0

Это вариант для компоновщика, который вызывает msbuild. – Deduplicator

+0

Согласно msdn: Различия между компилятором C# и компилятором C++: Нет файлов объектов (.obj), созданных в результате вызова компилятора C#; выходные файлы создаются напрямую. В результате этого компилятору C# не нужен компоновщик. – Giedrius

Смежные вопросы