SORU
28 AĞUSTOS 2009, Cuma


Müthiş tespit yığını

Benim bir idam ediyorum.dosya. İdamdan sonra program bir süre sonra mesaj ile çıkar çalışır:

**** stack smashing detected ***: ./a.out terminated*
*======= Backtrace: =========*
*/lib/tls/i686/cmov/libc.so.6(__fortify_fail 0x48)Aborted*

Bunun olası nedenleri ne olabilir ve bunu nasıl düzeltmek?

CEVAP
28 AĞUSTOS 2009, Cuma


Burada Stack Smashing aslında bir koruma mekanizması arabellek taşması hataları tespit etmek için gcc tarafından kullanılan kaynaklanıyor. Aşağıdaki kod parçasında: örneğin

#include <stdio.h>

void func()
{
    char array[10];
    gets(array);
}

int main(int argc, char **argv)
{
    func();
}

Derleyici (gcc) değerleri bilinen koruma değişkenler (kanaryalar olarak adlandırılır) ekler. Boyutu 10'dan daha büyük bir giriş dizesi bu değişken SİGABRT sonuçlanan yolsuzluk programı sonlandırmak için neden olur.

Bazı fikir almak, gcc kullanarak derleme seçenek ise -fno-stack-protector Bu koruma devre dışı bırakmayı deneyebilirsiniz. Bu durumda farklı bir hata, büyük ihtimalle yasadışı bir bellek konumuna erişmeye çalıştığınız bölümlendirme hatası alırsınız.

Bir debugger ile programı çalıştırarak taşma noktasına hakkında bilgi alabilirsiniz. Valgrind iyi bir yığın ile ilgili hataları ile çalışmaz, ama bir hata ayıklayıcı gibi, iğne ucu konumu Yardım ve kazaya sebep olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fr. Eckle Studios

    Fr. Eckle St

    29 Kasım 2006
  • How It Should Have Ended

    How It Shoul

    5 Mart 2007
  • UrAvgConsumer

    UrAvgConsume

    1 Ocak 2012