LINUX.ORG.RU

Вышел CompCert 2.0

 compcert


3

3

CompCert — это компилятор языка программирования Си (ANSI C с незначительными ограничениями) для платформ PowerPC, ARM и IA32, предназначенный для сборки программ с повышенными требованиями надежности и дополняющий формальные методы проверки (статический анализ, проверка на модели и т.п.) на уровне исходного кода.

Некоторые изменения:

  • поддержка типов long long и unsigned long long;
  • предварительная поддержка отладочной информации;
  • агрессивная стратегия исключения дублирующегося кода;
  • уменьшено потребление памяти при компиляции;
  • исправлены некоторые ошибки.

Исходные коды компилятора распространяются на условиях лицензии «INRIA Non-Commercial License Agreement».

>>> Подробности

★★★★★

Проверено: tazhate ()
Ответ на: комментарий от quest

когда целый вызов memset() выкидывается?

и когда он выкидывается? похоже на бред

Тут в треде уже приводили ссылку на сообщение в багтрекере GCC — если компилятор видит, что после memset() очищенная область памяти нигде не используется, то он считает этот вызов лишним и выкидывает.

Пожалуй, единственный случай, когда эта оптимизация неуместна — очистка блоков памяти, в которых были пароли или другие важные данные, которые в открытом виде должны храниться (в том числе в оперативке) как можно меньше. Но, во-первых, memset() тут, IMHO, не совсем подходящий способ «замести следы», т.к. при просмотре дампа памяти процесса последовательность нулей или других одинаковых значений с большой вероятностью вызовет у злоумышленника подозрения; лучше забивать такие области случайным мусором. А во-вторых даже для memset() есть способы избежать выкидывания вызова.

anonymous
()
Ответ на: комментарий от anonymous

Можно сюда работающий минимальный пример

quest ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.