SORU
26 Mart 2013, Salı


Ne kadar tehlikeli sınırları dışında bir dizi erişim.

Ne kadar tehlikeli kendi sınırları (C) dışında bir dizi erişim. Kimi zaman da başına geldiğini okudum dışında bir dizi (ben şimdi anladım o zaman erişim belleği tarafından kullanılan diğer bazı parçaları benim program veya hatta ötesinde) ya da benim yapmaya çalıştığım için ayarlanmış bir değer için bir dizin dışında bir dizi. Program bazen çöküyor, ama bazen sadece çalışır, sadece beklenmedik bir sonuç verir.

Şimdi ne bilmek istiyorum, bu ne kadar tehlikeli gerçekten. Eğer benim program zarar görürse, o kadar da kötü değil. Öte yandan ben bir şekilde bazı tamamen ilgisiz bellek girmeyi başardı, çünkü benim program dışında bir şey kırılırsa, o zaman çok kötü olur herhalde. Okuduğum bir sürü 'her şey olabilir', 'segmentation might be the least bad problem' 'harddisk olabilir pembe ve tek boynuzlu at olabilir şarkı altında pencere', hangi tüm iyi, ama ne olduğunu gerçekten tehlike mi?

Soru:

  1. Dizi dışında okuma değerleri bir şey zarar verebilir benim dışında program? Olaylara tıpkı hayal olur 'son kez bir şey, ya da mesela ki bunu değiştirmek değiştirin 'bir dosya özniteliği ulaşmam oldu? açtı
  2. Olabilir dizi zarar bir şey dışında çıkış değerleri ayarı benim dışında program? Bu stackoverflow question erişim mümkün olduğunu toplamak konum herhangi bir bellek, orada hiçbir güvenlik garantisi.
  3. Ben şimdi böyle büyük mükafat içinden benim küçük programları çalıştırmak. Bu mu olamaz nerede benim program etrafında bazı ekstra koruma sağlar kendi hafızası dışında ulaşmak? Böyle büyük mükafat zararı olabilir mi?
  4. Doğal olarak adamcağız benim kod güvenli bir şekilde çalıştırmak için nasıl bir önerin var mı?

OS X 10.7, 4.6 Güncellemelerinden kullanıyorum

Bu Stackoverflow benim ilk soru. Zaman okuma konusunda elimden geldiği kadar aldım, ama sanırım çok kaynak özledim. Bana eğer yeterli araştırma ve/yapmadım hissedersen haber ver ya bu soru ile diğer sorunlara bakın.

CEVAP
26 Mart 2013, Salı


ISO C standardı (dilin resmi tanımı), kendi sınırları dışında bir dizi erişim ile ilgili olarak "tanımsız davranış". Bunun anlamı şudur:

davranış, bir nonportable veya hatalı programı oluşturmak kullanımı üzerine ya bu Uluslararası Standart hayır getirir hatalı veri gereksinimleri

Non-normatif bir not bu genişletir:

Durumu görmezden gelmek mümkün tanımsız davranış aralıkları tamamen öngörülemeyen sonuçları ile, Çeviri sırasında davranıyor veya belgelenmiş bir şekilde karakteristik programı yürütme ortam (ya da tanısal bir mesaj verilmesi olmadan) çeviri işine son vermek veya yürütme (a verilmesi ile tanı iletisi).

Teori böyle. Gerçeklik nedir?

""Durumunda, ya da şu anda çalışan programı, programı yaramazlık neden olabilir) ait olan bellek parçası gireceksiniz, ya da o . en iyi yer ^em>değilşu anda çalışan program muhtemelen bölümleme hatası gibi bir şey çökmesine program neden olacak) aittir. Ya da programın sahibi olan, ama salt okunur işaretli bellek yazma girişimi olabilir; muhtemelen bu da programın çökmesine neden olur.

Bu program aynı anda birbirinden süreçleri çalıştıran korumaya çalışan bir işletim sistemi altında çalışan olduğunu varsayarsak. Eğer kod üzerinde çalışan "çıplak metal", derseniz bu bir işletim sistemi çekirdeği ya da gömülü bir sistem, yok böyle bir koruma; yaramazlık kodu nedir gerekiyordu sağladığı koruma. Bu durumda, hasar olasılıklarını önemli ölçüde daha büyük, bazı durumlarda, donanım fiziksel hasar (veya şeyler ya da insanlar yakın) de dahil olmak üzere.

Hatta korunan işletim sistemi ortamında, korumalar her zaman 0 değildir. Ayrıcalığı olmayan programlara izin veren sistem hataları root (yönetici) erişimi, örneğin elde etmek için faaliyet göstermektedir. Hatta sıradan bir kullanıcı ayrıcalıkları olan, düzgün çalışmayan bir program aşırı kaynak (bellek, disk CPU), muhtemelen tüm sistemi yıkmak tüketebilir. Kötü amaçlı yazılım (virüs, vb.) patlatır sisteme yetkisiz erişim sağlamak için arabellek taşması.

(Bir tarihsel örnek: core memory tekrar tekrar erişim ile bazı eski sistemler üzerinde sıkı bir döngü içinde tek bir bellek konumu tam anlamıyla bellek yığını erimesine neden olabileceğini duydum. Diğer olasılıkları yok bir CRT ekran ve hareketli okuma/yazma kafasının disk sürücü ile harmonik frekans sürücü kabini, neden yürüyüş boyunca bir masa ve üzerine düşme kat.)

Ve her zaman Skynet endişelenecek bir şey yok.

Eğer bir program kötü bir şey yapmak yazabilir misin . son durum şu: ^em>kastenadamcağız bir program aynı şeyi yapacak en azından teorik olarak mümkündüryanlışlıkla.

Uygulamadaçokadamcağız program MacOS X sistemi üzerinde çalışan bir şey kaza daha ciddi yapacak, olası değildir. Ama bu mümkün değiltamamençok kötü şeyler yapmaktan arabası kod önlemek.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CNET

    CNET

    5 Mayıs 2006
  • Helen Bradley

    Helen Bradle

    4 Mart 2008
  • Lamarr Wilson

    Lamarr Wilso

    27 Aralık 2008