Güvenli Tamsayı İşlevlerini Kullanma

Güvenlik sorunlarını en aza indirmenin bir yolu tamsayı taşmalarını ve aşımalarını önlemektir.

  • Tamsayı taşması, aritmetik bir işlemin sonucu, bunu almak üzere ayarlanan veri türünün bellek alanından büyük olduğunda oluşur. Bu işlem, tamsayının kesilmesine ve yanlış bir sonuçla sonuçlanır. Örneğin, değerinden büyük 2^31-1bir değerle sonuçlanan iki 32 bit tamsayı eklerseniz, sonuç 32 bit tamsayı alanına sığacak şekilde kesilir ve bu da kodunuzda beklenmeyen davranışlara yol açabilir.

  • Genellikle çıkarma işlemi yanlış sonuç verdiğinde tamsayı taşması oluşur. Örneğin, INT_MIN bir sayıyı çıkarırsanız (32 bit işaretli tamsayı için en küçük değer), sonuç 32 bit tamsayı alanına sığacak şekilde kesilir ve bu da beklenmeyen davranışlara yol açabilir.

  • İki veri türü arasında dönüştürme, yeni bellek alanına sığmayan bir sonucun kesimi nedeniyle yanlış sonuçlara da neden olabilir.

ntintsafe kitaplığı, çekirdek modu kodunda taşma ve yetersizlik durumlarını önlemek için sınır denetimiyle güvenli tamsayı aritmetik işlemleri gerçekleştiren bir dizi C işlevi sağlar. Tüm işlevler, Windows Sürücü Seti (WDK) ile birlikte gelen ntintsafe.h üst bilgi dosyasında bulunur. Bu işlevler, uygulama kodu tarafından kullanılan Windows IntSafe işlevlerine karşılık gelir.

Bu işlevleri dizin veya arabellek boyutunu hesaplamak ya da başka bir sınır denetimi biçimini hesaplamak için kullanırsınız. İşlevler hız için iyileştirilmiştir.

Güvenli tamsayı işlevleri aşağıdaki avantajları sunar:

  • Hedef arabelleğin boyutu, işlevin arabelleğin sonunu aşmaması için her zaman işleve sağlanır.

  • İşlem istenen sonucu kesse bile arabelleklerin null olarak sonlandırılacağı garanti edilir.

  • Tüm işlevler, yalnızca bir olası başarı kodu (STATUS_SUCCESS) ve bir olası hata koşulu (STATUS_INTEGER_OVERFLOW) içeren bir NTSTATUS döndürür. Örneğin, NTSTATUS status = RtlIntSub(INT_MIN, 1, &result); sonuç = -2.147.483.649 döndürmelidir, ancak bu sayı 32 bit alanda temsil edilemez. Bunun yerine, result tanımsızdır ve status STATUS_INTEGER_OVERFLOW, hem taşmaları hem de aşım durumlarını raporlamak için döndürülen durum değeridir.

ntintsafe kitaplığı iki işlev kategorisine sahiptir:

  • Dönüştürme işlevleri— Bu işlevler iki veri türü arasında dönüştürme gerçekleştirir.

  • Aritmetik işlevler— Bu işlevler her veri türü için toplama, çıkarma ve çarpma işlemleri gerçekleştirir.

Kernel-Mode Güvenli Tamsayı İşlevlerinin Özeti

Kernel-Mode Güvenli Tamsayı İşlevlerini İçeri Aktarma