Главная > Программирование, Цiкавi дослiди > Динамический рантайм в VS2008. Вопросы безопасности.

Динамический рантайм в VS2008. Вопросы безопасности.


Загадка: если установить SP1 на Visual Studio 2008, какой рантайм будет требовать собранный такой версией студии бинарь? Отгадка: рантайм от Visual Studio 2008 без SP1 (9.0.21022.8). То есть плевать на все фиксы сделанные в SP1, плевать на Security Update — скомпиленные вами бинари продолжают юзать дырявый рантайм.

Обнаружилось абсолютно случайно, когда пришлось слинковаться с либой, у которой был другой рантайм (9.0.30729.1). В итоге генерился прикольный манифест в exe файле:

  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.30729.1" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>

И на XP запустить не выходило, потому что надо было два рантайма.

Как же заставить слинковаться с самым свежим рантаймом? Через специальный дефайн для препроцессора:

_BIND_TO_CURRENT_VCLIBS_VERSION=1

Более подробно, про частные случаи линковки с различными библиотеками рантайма, можно прочитать тут.

ВАЖНО: если вы используете еще какие-то либы типа буста, их тоже придется пересобирать с этой опцией. Иначе будет такая же ситуация с манифестом, как была у меня (несколько рантаймов).

  1. Комментариев нет.
  1. No trackbacks yet.

Оставьте комментарий