Şu anda arabellek taşması yapmayı öğrenmekle ilgileniyorum. Biraz montaj yaptım ve yığının nasıl çalıştığını ve nasıl bir tampon taşması yapacağımı anladım. Ancak, taşma yapmama izin vermek için GCC 4.9.1'i almaya çalışırken biraz sıkıntı yaşıyorum. uygun bir tampon. Debian Jessie'yi çalıştırıyorum. Bölüm 2.2'de, takip etmeye çalıştığım öğreticidirModern sistemdeki arabellek taşmalarını nasıl test edebilirim?
. Sağladığı C programını kopyaladım/yapıştırdım ve onunla aynı Perl betiğini kullanıyorum, bu yüzden her şey onun davasıyla tamamen aynı (elbette sistem dışında).
Bunlar sürekli alıyorum sonuçları şunlardır:
~/projects/buffer-overflow$ ls
run.pl test.c
~/projects/buffer-overflow$ sudo su
[email protected]# echo "0" > /proc/sys/kernel/randomize_va_space
[email protected]# exit
exit
~/projects/buffer-overflow$ gcc -m32 -fno-stack-protector -zexecstack test.c
~/projects/buffer-overflow$ ./run.pl
Address of foo = 0x804845b
Address of bar = 0x80484a4
My stack looks like:
(nil)
0xffffd4a8
0xf7e58b2f
0xf7fb3ac0
0x8048657
0xffffd494
[email protected]
Now the stack looks like:
0xffffd718
0xffffd4a8
0xf7e58b2f
0xf7fb3ac0
0x42418657
0x46454443
Yakın oyları anlamıyorum. Soru bana açık görünüyor ve kesinlikle programlama ile ilgili. – NPE
Yığın "doğru" yazıldığından emin olmak için Perl komut dosyasıyla denemeden önce * uzun bir dizeyi * girmeyi denediniz mi? Gcc'in her sürümü, bu tür hilelere karşı yeni optimizasyonlar ve karşı önlemler getiriyor. Belki de -O ile deneyebilirsiniz. – LSerni
@NPE. Bunun için de endişeleniyorum. Bana bir yasal ve kesişen soru gibi görünüyor. –