SORU
1 ŞUBAT 2010, PAZARTESİ


Nasıl segfault çekirdeği günlük bir mesajı okumak mı

Bu çok basit bir soru, am kern.log aşağıdaki segfault hata üretir bir uygulama hata ayıklamak için çalışıyorum

kernel: myapp[15514]: segfault at 794ef0 ip 080513b sp 794ef0 error 6 in myapp[8048000 24000]

Burada benim sorular:

  1. Orada segfault diff hata sayıların ne olduğu konusunda herhangi bir belge, bu durumda hata 6, 4, 5 hata gördüm

  2. Bilgi anlamı at bf794ef0 ip 0805130b sp bf794ef0 and myapp[8048000 24000] nedir?

Şimdiye kadar semboller ile derlemek için başardı, ve x 0x8048000 24000 ben ne zaman bir sembol verir, bunu yapmanın doğru yolu nedir? Benim şimdiye kadar varsayımlar şunlardır:

  • sp = işaretçi yığını?
  • Yönerge işaretçisi = ıp
  • = ??? at?
  • [8048000 24000] = sembol Adres uygulamam?

CEVAP
1 ŞUBAT 2010, PAZARTESİ


Benim sınırlı bilgiye dayanarak, varsayımlar doğru.

  • sp = işaretçi yığını
  • ip = Yönerge işaretçisi
  • 6* = *Adres

Eğer sorun hata ayıklama olsam bir çekirdek dökümü üretmek veya stack backtrace Bir günlük kazası için bu kodu değiştirmek istiyorum. Ayrıca bu program altında çalıştırabilirsiniz (veya takmak) GDB.

Hata kodu sadece sayfa hataları için mimari Hata Kodu ve Mimarlık özel görünüyor. Genellikle çekirdek kaynağı arch/*/mm/fault.c belgelenmiştir. Linux/arch/i386/mm/fault.c kopyamın hata_kodu için: aşağıdaki tanım vardır

  • bit 0 == 0 hayır Sayfa, 1 bulundu koruma hatası anlamına gelir
  • 1 == 0, 1 demek okumak demek karalayacaksınız
  • bit 2 == 0 anlamına gelir çekirdek, 1 kullanıcı modu anlamına gelir

Linux/arch/x86_64/mm/fault.c kopyamın aşağıdaki ekler:

  • bit 3 == 1 hatası talimat getirme anlamına geliyor

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Eddie Bravo

    Eddie Bravo

    17 EKİM 2006
  • Jonathan D.

    Jonathan D.

    3 Kasım 2006
  • Marina and The Diamonds

    Marina and T

    8 Temmuz 2008