Microsoft открыла исходники Checked C

17 июня 2016, 10:43

Исследовательский центр Microsoft Research открыл исходники проекта Checked C — расширения языка программирования С, которое упрощает разработку программ без уязвимостей, связанных с переполнением буфера, выходом за границы массива, некорректным приведением типа и другими нарушениями безопасности памяти, сообщает Хакер.ru.

Читать далее...

Уязвимости такого рода особенно характерны для С и C++, потому что эти языки разрешают обращаться к произвольным адресам и вручную пересчитывать значения указателей.

Забота об осмысленности этих вычислений и допустимости выполняемых операций с памятью полностью ложится на плечи разработчика. Неизбежный результат — труднозаметные ошибки в любой достаточно сложной программе. В лучшем случае они ведут к сбоям и неверной работе, в худшем — оставляют лазейки, которыми могут воспользоваться злоумышленники.

Checked С даёт программисту средства, позволяющие лучше описать, каким образом предполагается использовать указатели и где именно располагаются данных. Допустимость операций с памятью проверяется как во время исполнения программы, так и на стадии компиляции.

Язык вводит три новые разновидности указателей в дополнение к обычным указателям С.

  • ptr<T> — указатель на тип T, который не нуждается в проверке выхода за границы массива. Такие указатели нельзя использовать для вычисления новых адресов.
  • array_ptr<T> — указатель на элемент массива, состоящего из значений типа T. Адресная арифметика с этой разновидностью указателей разрешена, но разработчик должен сам следить за тем, чтобы результат вычислений не оказался за пределами массива.
  • span<T> — указатель, хранящий информацию о величине массива и избегающий выхода за его пределы во время исполнения программы. При взаимодействии с С он приводится к типу array_ptr.

Все три новых указателя не могут иметь нулевое значение, когда их используют для обращения к памяти.

Язык расширен таким образом, чтобы упростить постепенный перевод на Checked C уже существующих разработок. Поскольку нововведения не распространяются на классические указатели, существующие программы на С продолжат работать, как прежде. Чтобы задействовать возможности Checked C, их нужно заменить указателем одного из новых типов.

подписка на главные новости 
недели != спам
# ит-новости
# анонсы событий
# вакансии
Обсуждение