次の方法で共有


安全な整数関数の使用

セキュリティの問題を最小限に抑える 1 つの方法は、整数のオーバーフローとアンダーフローを防ぐことです。 整数オーバーフローは、算術演算の結果が、それを受け取るために設定されたデータ型のメモリ領域よりも大きい場合に発生します。 これにより、整数が切り捨てられ、正しくない結果になります。 アンダーフローは、演算 (通常は減算) によって正しくない結果が得られた場合に発生します。 2 つのデータ型間でキャストすると、新しいメモリ領域に収まらない結果が切り捨てられるため、正しくない結果が発生する可能性もあります。

ntintsafe ライブラリには、カーネル モード コードでのオーバーフローやアンダーフローを防ぐために、境界チェックを使用して安全な整数算術演算を実行する C 関数のセットが用意されています。 これらの関数は、アプリケーション コードで使用される Windows IntSafe 関数に対応します。 これらの関数は、インデックスまたはバッファー サイズを計算したり、他の形式の境界チェックを計算したりするために使用します。 機能は速度のために最大限に活用される。

安全な整数関数には、次の利点があります。

  • コピー先バッファーのサイズは常に関数に提供され、関数がバッファーの末尾を超えて書き込まれることはありません。

  • 操作によって意図した結果が切り捨てられた場合でも、バッファーは null で終了することが保証されます。

  • すべての関数は NTSTATUS を返します。成功コード (STATUS_SUCCESS) と考えられるエラー条件 (STATUS_INTEGER_OVERFLOW) は 1 つだけです。

ntintsafe ライブラリには、次の 2 つのカテゴリの関数があります。

  • 変換関数 - これらの関数は、2 つのデータ型間の変換を実行します。

  • 算術関数 - これらの関数は、各データ型に対して加算、減算、乗算演算を実行します。

Kernel-Mode 安全な整数関数の概要

安全な整数関数 Kernel-Mode インポートする