Çoğu zaman NOP
talimat adreslerini hizalamak için kullanılır. Bu genellikle, örneğin arabellek taşmasını kullanmak veya dize güvenlik açığını biçimlendirmek için Shellcode yazılırken görülür .
100 bayt ileriye doğru göreceli bir sıçrama yaptığınızı ve kodda bazı değişiklikler yaptığınızı varsayalım. Şanslarınız değişikliklerinizin atlama hedefinin adresini bozmasıdır ve böylece yukarıda belirtilen göreceli sıçramayı da değiştirmeniz gerekecektir. Burada, NOP
hedef adresi ileri itmek için s ekleyebilirsiniz . NOP
Hedef adres ile atlama talimatı arasında birden fazla s varsa NOP
, hedef adresi geriye çekmek için s'yi kaldırabilirsiniz .
Etiketleri destekleyen bir montajcı ile çalışıyorsanız bu sorun olmaz. Basitçe yapabilirsiniz JXX someLabel
(burada JXX bazı koşullu atlamadır) ve birleştirici, someLabel
etiketi bu etiketin adresiyle değiştirecektir . Ancak, monte edilen makine kodunu (gerçek opcode) elle değiştirirseniz (bazen kabuk kodu yazarken olduğu gibi), atlama talimatını manuel olarak da değiştirmeniz gerekir. Ya onu değiştirin ya da NOP
s kullanarak hedef kod adresini taşıyın .
NOP
Talimat için bir başka kullanım örneği, NOP kızağı olarak adlandırılan bir şey olacaktır . Özünde fikir, hiçbir yan etkiye neden olmayan (ör.NOP
veya bir kaydı artırıp azaltarak) ancak talimat işaretçisini artırın. Bu, örneğin, adresi bilinmeyen belirli bir kod parçasına atlamak istediğinde yararlıdır. İşin püf noktası, bahsedilen NOP kızağını hedef kodun önüne yerleştirmek ve daha sonra bahsedilen kızağa bir yere atlamaktır. Olan şey, yürütmenin umarım yan etkisi olmayan diziden devam etmesidir ve istenen kod parçasına çarpana kadar talimat başına talimatı iletir. Bu teknik, yukarıda belirtilen tampon taşması istismarlarında ve özellikle ASLR gibi karşı güvenlik önlemlerinde yaygın olarak kullanılmaktadır .
NOP
Talimat için bir başka özel kullanım , bir programın kodunu değiştirmektir. Örneğin, koşullu atlamaların parçalarını NOP
s ile değiştirebilir ve böylece durumu atlatabilirsiniz. Bu, yazılımın kopya korumasını " kırırken " sıklıkla kullanılan bir yöntemdir . En basit haliyle, sadece kod if(genuineCopy) ...
satırı için montaj kodu yapısını kaldırmak ve talimatları NOP
s ve .. ile değiştirmekle ilgili .. Voilà! Hiçbir kontrol yapılmaz ve orijinal olmayan kopyalar çalışır!
Özünde hem kabuk kodu hem de çatlama örneklerinin aynı şeyi yaptığına dikkat edin; göreli adreslemeye dayanan işlemlerin göreli adreslerini güncellemeden mevcut kodu değiştirin.