使用安全整数函数
尽量减少安全问题的一种方法是防止整数溢出和下溢。 当算术运算的结果大于设置为接收它的数据类型的内存空间时,会发生整数溢出。 这会导致整数被截断,结果不正确。 当运算(通常为减法)给出不正确的结果时,将发生下溢。 由于截断了不适合新内存空间的结果,两种数据类型之间的强制转换也可能导致不正确的结果。
ntintsafe 库提供了一组 C 函数,这些函数通过边界检查执行安全整数算术运算,以防止内核模式代码中出现溢出和下溢。 这些函数对应于应用程序代码使用的 Windows IntSafe 函数。 使用这些函数来计算索引或缓冲区大小,或计算某种其他形式的边界检查。 函数针对速度进行优化。
安全整数函数具有以下优点:
始终向函数提供目标缓冲区的大小,以确保函数不会写入缓冲区末尾。
保证缓冲区以 null 结尾,即使操作截断了预期结果。
所有函数都返回 NTSTATUS,其中只有一个可能的成功代码 (STATUS_SUCCESS) , (STATUS_INTEGER_OVERFLOW) 一个可能的错误条件。
ntintsafe 库有两类函数:
转换函数 - 这些函数执行两种数据类型之间的转换。
算术函数 - 这些函数对每种数据类型执行加法、减法和乘法运算。