2010-01-25 8 views
11

क्या सभी सिस्टम कॉल के लिए जीसीसी उपयोग int निर्देश को मजबूर करना संभव है, लेकिन sysenter नहीं है? यह सवाल अजीब लग सकता है लेकिन मुझे इस तरह पाइथन और फ़ायरफ़ॉक्स जैसी कुछ परियोजनाओं को संकलित करना है।सिस्टम कॉल के लिए जीसीसी उपयोग int को कैसे मजबूर करें, sysenter नहीं?

सारांश

धन्यवाद jbcreix, मैं glibc #undef I386_USE_SYSENTER द्वारा sysenter के उपयोग को अक्षम करने के लिए 2.9 स्रोत कोड डाउनलोड किया है, और sysdeps में लाइनों संशोधित/यूनिक्स/SysV/linux/i386/sysdep.h, , और यह काम करता है।

+3

आसान, syscall.s में int 80 द्वारा sysenter को प्रतिस्थापित करने के बाद अपनी सी लाइब्रेरी को पुन: संकलित करें और फिर से लिंक करें। यह कंपाइलर जेनरेट कोड नहीं है जिसका मतलब है कि आप भाग्यशाली हैं। – jbcreix

+0

@jbcreix इसके लिए धन्यवाद। क्या आप इसे उत्तर के रूप में पोस्ट कर सकते हैं ताकि मैं जवाब स्वीकार कर सकूं? – ZelluX

उत्तर

2

फिर syscall.s और कड़ी में int 80 द्वारा sysenter बदलने के बाद अपने सी पुस्तकालय पुनः संकलित करें।

यह संकलक उत्पन्न कोड नहीं है जिसका अर्थ है कि आप भाग्यशाली हैं।

वास्तविक syscall के अंतिम मूल यहाँ है, के रूप में ओ पी का कहना है:

http://cvs.savannah.gnu.org/viewvc/libc/sysdeps/unix/sysv/linux/i386/sysdep.h?root=libc&view=markup

और जैसा कि मैं संदिग्ध वहाँ वास्तव में एक syscall.S यह है कि अभी glibc स्रोतों एक भूलभुलैया हैं था।

http://cvs.savannah.gnu.org/viewvc/libc/sysdeps/unix/sysv/linux/i386/syscall.S?root=libc&view=markup

तो मुझे लगता है वह यह अधिकार मिल गया, asveikau।

+0

मैंने सोचा था कि इन दिनों "int 80h" या "sysenter" linux-gate.so से आता है जो कर्नेल द्वारा एक जादू पृष्ठ पर मैप किया गया है। कम से कम x86 पर। – asveikau

1

आप जीसीसी को संशोधित नहीं करते हैं; आप libc को संशोधित करते हैं (या अधिक सटीक रूप से, इसे पुन: संकलित करें) और कर्नेल। जीसीसी sysenter निर्देश उत्सर्जित नहीं करता है; यह जेनेरिक सिस्कल (2) इंटरफ़ेस को कॉल जेनरेट करता है, जो सिस्टम कॉल एंट्री और बाहर निकलने के लिए एक एकीकृत फ्रंट एंड प्रस्तुत करता है।

या, आप एक पेंटियम का उपयोग कर सकते हैं; SYSENTER को पीआईआई =] तक पेश नहीं किया गया था। लिनक्स द्वारा प्रयोग किया जाता दिलचस्प तरीकों के लिए नोट निम्नलिखित KernelTrap लिंक: http://kerneltrap.org/node/531

संबंधित मुद्दे