2016-03-18 23 views
0

Unix 6'nın uygulanmasına karşı bir cevap arıyorum. http://warsus.github.io/lions-/Kullanıcı programına hata kodu nasıl geri verilir?

2774:     if(u.u_error < 100) { 
2775:       if(u.u_error) { 
2776:         ps =| EBIT; 
2777:         r0 = u.u_error; 
2778:       } 
2779:       goto out; 
2780:     } 

bu sistem çağrısı hata kodu u_error gibi kullanıcı struc saklanan/döndürülür. Daha sonra r0'a (yukarıdaki kod snippetindeki r0 değil, fakat yakın) kayıt edilir. Bütün bunlar çekirdek modunda gerçekleşir. Benim sorum, r0'daki bu hata kodunun kullanıcı modu arayıcısına nasıl döndürülmüş olduğudur, özellikle kullanıcı modu kodu ile doğrudan r0'a erişilebiliyor mu? Detayları aramıyorum.

+2

Bu kod parçası ile kullanıcı programı arasında birkaç katman vardır. Linux'ta benzer şeylere bakın, bunlar iyi belgelenmiştir. Özellikle http://musl-libc.org/ http://musl-libc.org/ –

+0

gibi kaynak kodları üzerinde çalışın. İleride, temel programlama bilgisinden daha fazlasını gerektiren sorular sorduğunuzda, onlara bir programlama dili etiketi vermemelisiniz. örneğin C). Eğer bunu yaparsanız, sorularınızı sadece SO puanlarını çalıştırmaya çalışan ve moron ekibinin sizin sorunuza yaptığı gibi anlamadıkları soruları koyan moronlardan önce koyarsınız. – user3344003

cevap

1

Trap taşıma koduna bakıyorsunuz. Bir sistem, bir tuzak özel durumuna neden olarak çekirdek moduna geçer.

Sistem hizmetleri, parametreleri paketlerinden ayıran, bir tuzağa neden olan ve parametreleri yeniden paketleyen paketleyicidir. Kaybettiğiniz parça, kopyaladığınız kodu yürüten tuzağa neden olan kullanıcı modu sarıcısıdır.

+0

Çekirdeğin hata kodunu r0 registerı üzerinden kullanıcı programına döndürdüğünü öğrendim. Ancak kullanıcı modunda r0'a erişilebilir mi? – CCNA

+0

Evet, olabilir .--- – user3344003

İlgili konular