セキュリティの問題を最小限に抑える 1 つの方法は、整数のオーバーフローとアンダーフローを防ぐことです。 整数オーバーフローは、算術演算の結果が、それを受け取るために設定されたデータ型のメモリ領域よりも大きい場合に発生します。 これにより、整数が切り捨てられ、正しくない結果になります。 アンダーフローは、演算 (通常は減算) によって正しくない結果が得られた場合に発生します。 2 つのデータ型間でキャストすると、新しいメモリ領域に収まらない結果が切り捨てられるため、正しくない結果が発生する可能性もあります。
ntintsafe ライブラリには、カーネル モード コードでのオーバーフローやアンダーフローを防ぐために、境界チェックを使用して安全な整数算術演算を実行する C 関数のセットが用意されています。 これらの関数は、アプリケーション コードで使用される Windows IntSafe 関数に対応します。 これらの関数は、インデックスまたはバッファー サイズを計算したり、他の形式の境界チェックを計算したりするために使用します。 機能は速度のために最大限に活用される。
安全な整数関数には、次の利点があります。
コピー先バッファーのサイズは常に関数に提供され、関数がバッファーの末尾を超えて書き込まれることはありません。
操作によって意図した結果が切り捨てられた場合でも、バッファーは null で終了することが保証されます。
すべての関数は NTSTATUS を返します。成功コード (STATUS_SUCCESS) と考えられるエラー条件 (STATUS_INTEGER_OVERFLOW) は 1 つだけです。
ntintsafe ライブラリには、次の 2 つのカテゴリの関数があります。
変換関数 - これらの関数は、2 つのデータ型間の変換を実行します。
算術関数 - これらの関数は、各データ型に対して加算、減算、乗算演算を実行します。