- Linux 2.6, 2.4'ten nasıl farklıdır?
- Kaynak çekirdeğini değiştirebilir miyiz?
- int 0x80 hizmet rutinini değiştirebilir miyiz?
cevap
- 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.
- 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.
- 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.
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
- 1. Key'in Json verilerinin değerini değiştirebilir miyiz?
- 2. Yii2 Varlık dizini konumunu değiştirebilir miyiz?
- 3. Sınıf nesnesinin davranışını aşırı yükleyebilir miyiz?
- 4. joda yeni DateTime (int, int, int, int, int, int) weblogic 11g ile
- 5. int ve imzasız int
- 6. Int nasıl dönüştürülür? int
- 7. Dosyaya Hashtable yazabilir miyiz?
- 8. Nasıl Convert NSIndexPath Int Int?
- 9. javascript int dizgisi int dizilimi
- 10. int * const AND extern int *
- 11. SwipeRefreshLayout için tetikleyici göstergesine uzaklık ayarlayabilir miyiz?
- 12. SQL Server: convert ((int) yıl, (int) ay (int) gün) DateTime
- 13. int (?) In int * pi = new int (0); anlamı nedir?
- 14. DispatcherServlet içerik yapılandırma dosyası adını değiştirebilir miyiz? Bahar web mvc</p> <p>1) de
- 15. Çizgi grafiğin genişliğini değiştirebilir miyim?
- 16. WSO2 kök yönlendirmesini değiştirebilir misiniz?
- 17. ObservableCollection nasıl bir Eylem değiştirebilir?
- 18. C# Request.Form değişkenlerini değiştirebilir miyim?
- 19. Tercihler dosya adını değiştirebilir miyim?
- 20. jQuery `$ (window) .width()` değiştirebilir mi?
- 21. Bir Twig_SimpleFunction, bağlamı değiştirebilir mi?
- 22. Tüm yapılandırma dosyasını şifreleyebilir miyiz?
- 23. openrowset: birkaç satır atlayabilir miyiz?
- 24. QR Kodunu yeniden boyutlandırabilir miyiz?
- 25. , çift anahtarı hashmap'a ekleyebilir miyiz?
- 26. JVM belleğindeki nesneleri görebilir miyiz?
- 27. Android programlamasında Optionals kullanabilir miyiz?
- 28. Foundation with HTML5Boilerplate kullanabilir miyiz?
- 29. İşaretçiyi birleşim içinde kullanabilir miyiz?
- 30. Windows'ta git-cvs kullanabilir miyiz?
Niçin yapmak istediğinizi söylemiyorsunuz, o zaman sistemi kesiyor olmanızın doğru yolu olup olmadığını inceleyeceğiz? –
Bu gerçekten birden fazla farklı soru gibi görünüyor ... onu parçalamak bazı daha iyi sonuçlar alabilir. – cdeszaq