tanımlanmıştır. Arabellek aşımına neden olacak şekilde tasarlanan verilerin gönderilmesi sonucu, çalıştırılabilir kod bulundurduğu bilinen alanlara kötü amaçlı kodların eklenmesi mümkündür. Arabellekler, işletim sistemi (OS) kodunda yaygın olarak kullanıldığından, ayrıcalık yükselmesini gerçekleştiren ve sonrasında bilgisayar kaynaklarına sınırsız erişim hakkı kazanan saldırılar yapmak mümkündür. Ünlü Morris solucanı, saldırı tekniklerinden biri olarak kullanılıyordu.

Arabellek taşmaları ile sıkça ilişkilendirilen programlama dilleri, bellekte herhangi bir bölümdeki verilere erişmek veya bu verilerin üzerine yazmak için yerleşik bir koruma sağlamayan ve bir diziye(yerleşik arabellek türü) yazılan verileri otomatik olarak kontrol etmeyen C ve C ++'tır. Sınır denetimi, arabellek taşmalarını önleyebilir, ancak ek kod ve işlem süresi gerektirir. Modern işletim sistemleri kötü niyetli arabellek taşmaları ile mücadele etmek için, özellikle bellek düzenini rastgele belirlerler veya arabelleklerin arasına kasıtlı olarak boşluk bırakarak bu alanlara yazılan eylemleri aramak için çeşitli teknikler kullanırlar ("kanarya").

Arabellek taşması, bir arabelleğe yazılan verilerin yetersiz sınır denetimi nedeniyle hedef arabelleğe bitişik bellek adresindeki veri değerlerini de bozmasından dolayı oluşur. Bu olay, ilk başta verilerin hedef arabelleğe sığmadığını kontrol etmeden verileri bir arabellekten diğerine kopyalarken oluşabilir.

Aşağıdaki örnek ifade C diliyle yazılmış bir programdır. Programda iki veri bellekte komşu olarak bulunmaktadır: A, 8 bayt uzunluğunda dizi arabelleği; B, iki baytlık big-endian tam sayı.Başlangıçta, A değişkeni hiçbir şey içermez ve sıfır bayttır; B, 1979 sayısını içerir.

Şimdi, program ASCII kodlaması kullanarak, stringini karakter karakter A dizisine atma işlemini gerçekleştirmektedir.

B'nin değerin A buffer'ından taşan bir karakter ile ve ardından gelen null ile yanlışlıkla değiştirilmiş oldu. Bu örnekte, "k" ve sonrasında gelen null değerleri B değerini 27392 olarak değiştirdi.

İşletim sistemleri bazen arabelleğin sınırlarını aşan veri yazma işlemlerini tespit eder ve süreci sonlandıran segmentasyon hatası verir.

Örnekteki arabellek aşımını engellemek için strcopy yerine strncopy kullanılmalıdır. strncopy A'nın alabileceği maksimum değeri parametre olarak alarak, bu değerden fazlasını engeller. 
Arabellek aşımından bir güvenlik açığı olarak yararlanmak için kullanılan teknikler mimariye, işletim sistemine ve bellek bölgesine göre değişir. Örneğin heap(dinamik olarak kullanılan bellek) üzerindeki istismar kullanımı, call stack üzerindeki istismar kullanımı aynı değildir.

"Ana Madde : Yığın aşımı sömürüsü"

Teknik bilgiye sahip bir saldırgan, farklı yollarla programları manüpüle ederek yığın tabanlı sömürü gerçekleştirebilir. Bu yollar:
Yığın arabelleği taşmasını sağlamak için kullanılacak verilerin adresi öngörülemiyorsa, uzaktan kod yürütülmesine neden olan yığın arabellek taşması yararlanmak çok daha zor olur. Böyle bir arabellek taşmasını kullanmak için kullanılabilecek tekniğe "trambolin" denir. Bu teknikte, bir saldırgan savunmasız yığın arabelleğinde bir pointer bulur ve kabuk kodunun bu pointer'a göre konumunu hesaplar. Sonra, hafızada yer alan bir buyruğu tekrar yazarak ikinci bir zıplama ile çalıştırılmak istenen kabuk kod parçacağına ulaşır ve çalıştırır.

"Ana Madde : Öbek aşımı sömürüsü"

Öbek veri alanında meydana gelen bir arabellek taşması öbek taşması olarak adlandırılır ve yığın tabanlı taşmalardan farklı bir şekilde kullanılabilir. Öbek üzerindeki bellek, uygulama tarafından çalışma zamanında dinamik olarak ayrılır ve genellikle program verilerini içerir. Sömürme, uygulamanın bağlantılı liste işaretçileri gibi iç yapıların üzerine yazılmasına neden olacak şekilde bu verileri belirli yollarla bozarak gerçekleştirilir. Kanonik yığın taşma tekniği, dinamik bellek ayırma bağlantısını (malloc meta verileri gibi) üzerine yazar ve bir program işlev pointer'ı üzerine yazmak için sonuçtaki pointer değişimini kullanır.

JPEG'leri işleme konusunda Microsoft GDI+ güvenlik açığı, yığın taşması tehlikelerinden bir tanesidir.

Okunması veya çalıştırılmasından önce gerçekleşen arabellek manipülasyonu, sömürü girişiminin başarısız olmasına neden olabilir. Bu manipülasyonlar sömürü tehdidini hafifletebilir, ancak imkansız hale getiremezler. Bununla birlikte, bu filtreleri ve manipülasyonları atlamak için teknikler mevcuttur; Alfanümerik kod, polimorfik kod, kendini değiştiren kod ve libc-dönüş saldırıları. İzinsiz giriş tespit sistemleri tarafından tespit edilmesini önlemek için aynı yöntemler kullanılabilir.

Gerçek dünyadaki istismarlarda, istismarların güvenilir bir şekilde çalışması için üstesinden gelinmesi gereken çeşitli zorluklar vardır. Bu faktörler, adreslerde boş baytlar, kabuk kodunun yerinde değişkenlik, ortamlar arasındaki farklılıklar ve çalışma sırasında çeşitli karşı önlemler içerir.

"Ana Madde : NOP kızaklaması"NOP kızaklaması, yığın arabellek taşmasının başarıyla kullanılması için en eski ve en yaygın kullanılan tekniktir. Hedef alanın boyutunu etkili bir şekilde artırarak arabelleğin tam adresini bulma problemini çözer. Bunu yapmak için, yığının çok daha büyük bölümleri, işlem yapılmayan makine buyruk ile bozulmuştur. Saldırgan tarafından sağlanan verilerin sonunda, işlem yapılmayan yönergeler sonrasında, saldırgan, kabuk kodunun bulunduğu arabelleğin üst kısmına göreli olarak sıçrama yapmak için bir buyruk gönderir. NOP'ların bu koleksiyonuna "NOP-kızağı" adı verilir; çünkü, dönüş adresi, arabelleğin çalışmayan bölgesi içindeki herhangi bir adres üzerine yazılırsa, yürütme, işlem tamamlanıncaya kadar işlem yapmazlar. Sonunda atlamayla gerçek zararlı koda yönlendirilir. Bu teknik, saldırganın nispeten küçük kabuk kodu yerine NOP-kızağının nerede olduğunu tahmin etmesini gerektirir.

Bu tekniğin popülaritesi sebebi, saldırı önleme sistemleri sunan birçok satıcı, kullanılmakta olan kabuk kodunu algılama girişiminde bulunarak bu tür buyruk kümelerini aramaktadır. Bir NOP kızağının mutlaka sadece geleneksel olmayan işlemci buyruklarını içermediğini belirtmek önemlidir; Makine durumunu kabuk kodunun çalışmayacağı bir noktaya kadar bozmayan herhangi bir buyruk donanımdan destekli no-op'ların yerine kullanılabilir. Sonuç olarak, istismar yazarlarının kabuk kodu çalıştırma üzerinde gerçek bir etkisi olmayacak şekilde rastgele seçilmiş talimatlarla no-op kızağı oluşturmak için ortak uygulama haline geldi.

"Yazmaçlara atlama" tekniği, bir NOP kızağı için ilave alana ihtiyaç duymadan ve yığın ofsetlerini tahmin etmek zorunda kalmadan, yığın arabellek taşmalarının güvenilir bir şekilde kullanılmasını sağlar. Strateji, programın kontrollü arabelleğe ve dolayısıyla kabuk koduna işaret eden bir kayıtta bulunan bilinen bir işaretçiye atlanmasına neden olacak bir şeyle dönüş işaretçisini üzerine yazmaktır. Örneğin, A yazmacı, bir arabellek başlangıcındaki bir işaretçiyi içeriyorsa, yürütme akışını kontrol altına almak için bu kaydı operand olarak alan herhangi bir atlama veya çağrı kullanılabilir.

Birçok değiş tokuş ile çeşitli teknikler, arabellek aşımını saptamak veya engellemek için kullanılmaktadır. Arabellek aşımından kaçınmanın veya arabellek aşımını engellemenin en güvenilir yolu dil düzeyinde otomatik koruma kullanmaktır. Fakat bu tip bir koruma legacy code a uygulanamaz ve teknik, iş ve kültürel kısıtlamalar sıklıkla korunmasız bir dil gerektirir. Sonraki bölümler kullanılabilir seçenekleri ve uygulamaları tanımlamaktadır.

Assembly ve C / C ++, doğrudan belleğe erişime izin verdikleri için, arabellek aşımına karşı savunmasız olan popüler programlama dilleridir.  C, belleğin herhangi bir bölümündeki verilere erişime veya üzerine yazmaya karşı hiçbir dahili koruma sağlamaz; Daha özel olarak, bir arabelleğe yazılan verilerin bu arabelleğin sınırları içerisinde olup olmadığını kontrol etmez. Standart C ++ kitaplıkları, güvenli bir şekilde veri arabelleği yapmanın birçok yolunu sağlar ve C ++'ın Standart Şablon Kütüphanesi (Standard Şablon Kütüphanesi), programcının verilere erişirken denetimleri açıkça çağırması durumunda isteğe bağlı olarak sınır denetimi gerçekleştirebilen kaplar sağlar. Örneğin, bir vektörün üye işlevi at () ile sınır denetimi yapar ve sınır denetimi başarısız olursa bir out_of_range istisnası atar. Ancak, sınırlar denetimi açıkça çağrılmazsa, C ++ sadece C gibi davranır. Arabellek aşımlarını önleme teknikleri C için de mevcuttur.

Güçlü olarak yazılan ve COBOL, Java, Python ve diğerleri gibi doğrudan bellek erişimine izin vermeyen diller, çoğu durumda arabellek aşımının engellenmesini sağlar. C / C ++ dışında birçok programlama dili çalışma zamanı denetimi sağlar ve bazı durumlarda C veya C ++ veri üzerine yazıp yanlış sonuçları elde edilene kadar başka yönergeleri yürütmeye devam ederken, bu programlar uyarı gönderen bir derleme zamanı denetimi sunar. Bu tür dillere örnek olarak Ada, Eiffel, Lisp, Modula-2, Smalltalk, OCaml ve Cyclone, Rust ve D gibi C türevleri dahildir. Java ve .NET Framework bayt kodu ortamları ayrıca tüm diziler üzerinde sınır denetimi gerektirir. Neredeyse her interpreted dillerde, iyi tanımlanmış bir hata koşulu bildirerek arabellek aşımlarına karşı koruma sağlayacaktır. Genellikle, bir dil, sınır denetimi yapmak için yeterli tür bilgileri sağladığında, bu seçeneği etkinleştirmek veya devre dışı bırakmak için bir seçenek sağlanır. Değişken kod analizi, birçok dinamik bağlı ve tür denetimi kaldırabilir, ancak zayıf uygulamalar ve beceriksiz durumlar performansı önemli ölçüde düşürebilir. Yazılım mühendisleri, hangi dil ve derleyici ayarlarını kullanmaya karar verirken, güvenlikle ilgili performans maliyetleri arasındaki dengeyi dikkatlice gözden geçirmelidir.

Arabellek aşımı sorunu, arabelleklerin düşük düzeyli temsilsel ayrıntılarını veri türleri için kapsayıcı olarak ortaya koyduğu için C ve C ++ dillerinde yaygındır. Dolayısıyla, arabellek aşımı gerçekleştiren kodda yüksek doğruluk derecesini koruyarak arabellek aşımlar önlenm