Использование безопасных целочисленных функций
Одним из способов свести к минимуму проблемы безопасности является предотвращение переполнения и переполнения целочисленных чисел. Переполнение целочисленных чисел происходит, когда результат арифметической операции превышает объем памяти типа данных, который принимает его. Это приводит к усечению целого числа и неправильному результату. Недополук возникает, когда операция (обычно вычитание) дает неверный результат. Приведение между двумя типами данных также может привести к неверным результатам из-за усечения результата, который не соответствует новому пространству памяти.
Библиотека ntintsafe предоставляет набор функций C, которые выполняют безопасные целочисленные арифметические операции с проверкой границ, чтобы предотвратить переполнения и недополуки в коде режима ядра. Эти функции соответствуют функциям Windows IntSafe, используемым в коде приложения. Эти функции используются для вычисления индекса или размера буфера или для вычисления другой формы границ проверка. Функции оптимизированы для скорости.
Безопасные целочисленные функции обладают следующими преимуществами:
Размер целевого буфера всегда предоставляется функции, чтобы гарантировать, что функция не записывает данные за конец буфера.
Буферы гарантированно завершаются со значением NULL, даже если операция усекает предполагаемый результат.
Все функции возвращают NTSTATUS с одним возможным кодом успешного выполнения (STATUS_SUCCESS) и одним возможным условием ошибки (STATUS_INTEGER_OVERFLOW).
Библиотека ntintsafe имеет две категории функций:
Функции преобразования. Эти функции выполняют преобразования между двумя типами данных.
Арифметические функции— эти функции выполняют операции сложения, вычитания и умножения для каждого типа данных.