2009-02-26 17 views
0
  1. Linux 2.6, 2.4'ten nasıl farklıdır?
  2. Kaynak çekirdeğini değiştirebilir miyiz?
  3. int 0x80 hizmet rutinini değiştirebilir miyiz?
+0

Niçin yapmak istediğinizi söylemiyorsunuz, o zaman sistemi kesiyor olmanızın doğru yolu olup olmadığını inceleyeceğiz? –

+0

Bu gerçekten birden fazla farklı soru gibi görünüyor ... onu parçalamak bazı daha iyi sonuçlar alabilir. – cdeszaq

cevap

5
  1. Bu mimari bir revizyon. Her şey dahili olarak değişti. SMP desteği tamamlandı, süreç zamanlayıcısı büyük ölçüde geliştirildi, bellek yönetimi bir revizyon aldı ve birçok başka şey.
  2. Evet. Açık kaynaklı bir yazılımdır. Kaynağın bir kopyasına sahip değilseniz, satıcınızdan veya kernel.org'dan edinebilirsiniz.
  3. Evet ama mola libc'si o sizin baselayout kıracak ve siz mevcut sistem çağrıları sırasını değiştirmek eğer sizin toolchain kırmak olacak ve neredeyse her şey istediğiniz düşünebilir çünkü tavsiye edilmez Mümkün olduğu zaman kullanıcı alanında yapılmalıdır.
6

Update:
1. işleyicisinden adlandırılan fonksiyonu 2.6 x86-64 için 'syscall' yönerge işleyicisi adlandırılır, ancak 0x80 işleyicisi, esas olarak 2.4 ve 2.6 arasında aynıdır. 2. 0x80 işleyicisi, çekirdeğin geri kalanı gibi değiştirilebilir.
3. Geriye dönük uyumluluğu kaldırmazsanız, değiştirerek herhangi bir şeyi kırmayacaksınız. E.g., kendinizi çok eğimli hissettiğinizde kendi izinizi veya arka kapınızı ekleyebilirsiniz. İşleyiciyi değiştirirseniz, lib'lerinizi ve takım zincirinizi kıracağınızı söyleyen diğer gönderi yanlıştır. Sevk algoritmasını bozarsanız veya gönderim tablosunu yanlış düzenlerseniz, o zaman işleri bozarsınız.
3a. İlk başta yayınladığım gibi, 0x80 hizmetini genişletmenin en iyi yolu sistem çağrı işleyicisini genişletmektir.

çekirdek kaynak söylediği gibi: İsterseniz masa işaretçiler dizisi olduğunu
arch/i386/kernel/syscall_table.S

Not yüzden: i386 için

What:   The kernel syscall interface 
Description: 
     This interface matches much of the POSIX interface and is based 
     on it and other Unix based interfaces. It will only be added to 
     over time, and not have things removed from it.

Note that this interface is different for every architecture 
    that Linux supports. Please see the architecture-specific 
    documentation for details on the syscall numbers that are to be 
    mapped to each syscall. 


sistem çağrısı tablosu girdileri olan Çekirdek koruyucularla ileri düzeyde bir uyumluluk sağlamak için, işaretçinizi yerleştirmeden önce masaya basmanız gerekir.

sistem çağrı vektör sayısı
sonra kesme tanımlayıcı tabloya giriş yerleştirir set_system_gate ile system_call işlev adresi, ayarlar traps.c .h irq_vectors tanımlanmıştır. system_call işlevi kendiliğinden girdi.S'dir ve istenen işaretçiyi sistem çağrı tablosundan çağırır.
Kodun okunmasını görebileceğiniz birkaç temizlik bilgisi vardır, ancak 0x80 kesme işleyicisinin direk modifikasyonu, system_call işlevinin içinde entry.S'de gerçekleştirilir. Daha aklı başında, sistem çağrı tablosunu, gönderme mekanizmasını değiştirmeden kendi işlevinizi ekleyerek değiştirebilirsiniz.

Aslında, 2.6 kaynağını okuduktan sonra, bu int 0x80 ve x86-64 syscall'ın şu ana kadar aynı kodu kullandığını söylüyor. Böylece x86-32 ve x86-64 için taşınabilir değişiklikler yapabilirsiniz.
END Güncelleştirme

INT 0x80 yöntemi, sistem çağrı tablosu işleyicisini çağırır. Bu, kayıt argümanlarını bir çağrı tablosuna eşleştirir ve EAX kaydının içeriğine göre çekirdek fonksiyonlarını çağırır. Özel çekirdek API işlevlerini eklemek için sistem çağrı tablosunu kolayca genişletebilirsiniz.

Bu, sistem çağrı tablosunu da kullandığı için x86-64'teki yeni sistem koduyla da çalışabilir.

vb uzatmak yerine, libc'si init dahil tüm bağımlı kitaplıkları ve kodu, kıracak başka herhangi bir şekilde mevcut sistem çağrısı tablosu, değiştirmek durumunda

Burada mevcut Linux sistem çağrı tablo var: http://asm.sourceforge.net/syscall.html

İlgili konular