2011-12-22 3 views
6

है, तो आपआप x86-64 मशीनों पर सिस्कोल के प्रोटोटाइप कहां देखते हैं?

कितने मापदंडों एक विशिष्ट syscall उम्मीद कैसे जानते हो,

जो रजिस्टर प्रत्येक पैरामीटर में होना चाहिए,

और अंत में क्या प्रत्येक पैरामीटर का मतलब है?

क्या man समान रूप से आपको यह बताने के लिए कमांड कमांड है?

+0

ओएस निर्दिष्ट करें। –

+0

@ एलेक्स, मैं लिनक्स पर हूं। –

उत्तर

1

सिस्टम कॉल के लिए कोई मैनुअल नहीं है जो मुझे पता है, यह कुछ है जिसके लिए आपको स्रोत कोड में खोदना है।

इस हेडर फाइल, उपयोगी है के रूप में यह सिस्टम कॉल तर्क के साथ नमूने के कई हैं:

include/linux/syscalls.h

यह परिभाषाओं conains, जैसे:

asmlinkage long sys_getresuid(uid_t __user *ruid, uid_t __user *euid, uid_t __user *suid); 
asmlinkage long sys_getresgid(gid_t __user *rgid, gid_t __user *egid, gid_t __user *sgid); 
asmlinkage long sys_getpgid(pid_t pid); 
asmlinkage long sys_getpgrp(void); 
asmlinkage long sys_getsid(pid_t pid); 
asmlinkage long sys_getgroups(int gidsetsize, gid_t __user *grouplist); 

मेहराब syscalls हेडर फाइल है बाकी सिस्टम कॉल, जो कि आर्च निर्भर हैं:

arch/x86/include/asm/syscalls.h

(ये फ़ाइलें 2.6.32 के हैं - कर्नेल के पहले/बाद के संस्करणों में अलग-अलग फ़ाइल/निर्देशिका नाम हो सकते हैं)।

ध्यान रखें कि लिनक्स कर्नेल के आंतरिक भाग अक्सर बदलते हैं, और प्रमुख कर्नेल संस्करणों के बीच स्थिर एबीआई को रखने में बहुत सारे प्रयास नहीं किए जाते हैं। इसलिए, आपको वर्तमान में चल रहे कर्नेल के कर्नेल स्रोत कोड को देखना होगा, और उम्मीद नहीं है कि यह स्वचालित रूप से किसी भी अन्य कर्नेल संस्करण पर संकलित हो।

+0

AFAIK 'syscalls.h' में केवल प्रत्येक सिस्कल की संख्या के बारे में जानकारी होती है, इस बारे में नहीं कि किस रजिस्टरों में यह पैरामीटर की अपेक्षा करता है। –

+0

आप एक अलग फ़ाइल के बारे में सोच रहे हैं। मैंने इस फ़ाइल में क्या है इसका एक उदाहरण के साथ जवाब अद्यतन किया है। –

+0

जबकि लिनक्स कर्नेल के आंतरिक अक्सर बदल सकते हैं, एपीआई जो कर्नेल उपयोगकर्ता स्पेस (उर्फ सिस्कोल्स) के लिए प्रदान करता है वास्तव में स्थिर है। – muixirt

3

यह भी देखें: What are the calling conventions for UNIX & Linux system calls on x86-64

क्या आप देख रहे हैं गिरी ABI है, मैं आधिकारिक वेबसाइट नहीं मिल सकता है, लेकिन वहाँ इस तरह की जानकारी के साथ a blog है।

पूर्णांक 80h कॉल के साथ 64 में, यह है:

value storage 
syscall nr rax 
arg 1 rdi 
arg 2 rsi 
arg 3 rdx 
arg 4 r10 
arg 5 r9 
arg 6 r8 
संबंधित मुद्दे