Поделиться через


Использование безопасных целочисленных функций

Одним из способов свести к минимуму проблемы безопасности является предотвращение переполнения и переполнения целочисленных чисел. Переполнение целочисленных чисел происходит, когда результат арифметической операции превышает объем памяти типа данных, который принимает его. Это приводит к усечению целого числа и неправильному результату. Недополук возникает, когда операция (обычно вычитание) дает неверный результат. Приведение между двумя типами данных также может привести к неверным результатам из-за усечения результата, который не соответствует новому пространству памяти.

Библиотека ntintsafe предоставляет набор функций C, которые выполняют безопасные целочисленные арифметические операции с проверкой границ, чтобы предотвратить переполнения и недополуки в коде режима ядра. Эти функции соответствуют функциям Windows IntSafe, используемым в коде приложения. Эти функции используются для вычисления индекса или размера буфера или для вычисления другой формы границ проверка. Функции оптимизированы для скорости.

Безопасные целочисленные функции обладают следующими преимуществами:

  • Размер целевого буфера всегда предоставляется функции, чтобы гарантировать, что функция не записывает данные за конец буфера.

  • Буферы гарантированно завершаются со значением NULL, даже если операция усекает предполагаемый результат.

  • Все функции возвращают NTSTATUS с одним возможным кодом успешного выполнения (STATUS_SUCCESS) и одним возможным условием ошибки (STATUS_INTEGER_OVERFLOW).

Библиотека ntintsafe имеет две категории функций:

  • Функции преобразования. Эти функции выполняют преобразования между двумя типами данных.

  • Арифметические функции— эти функции выполняют операции сложения, вычитания и умножения для каждого типа данных.

Сводка Kernel-Mode безопасных целочисленных функций

Импорт Kernel-Mode безопасных целочисленных функций