System Calls - असेंबली लैंग्वेज में सिस्टम कॉल

Prahlad Godara ------ From DOOSEEP

सिस्टम कॉल कंप्यूटर या हार्डवेयर से काम करवाने के लिए कुस बेसिक और जरूरी निर्देश होते है। यह यूजर और कर्नेल के बीच इंटरफेस के लिए एपीआई हैं। जैसे - सिस्टम कॉल - sys_write और sys_exit, क्रमशः स्क्रीन में लिखने और कार्यक्रम से बाहर निकलने के लिए उपयोग करते है ।


असेंबली - सिस्टम कॉल

सिस्टम कॉल आप जो भी ऑपरेटिंग सिस्टम यूज़ करते है असेंबली प्रोग्राम में उस सिस्टम कॉल निर्देशों का उपयोग कर सकते हैं। यहां हम अपने असेंबली प्रोग्राम में लिनक्स सिस्टम कॉल का उपयोग करके समझने की कोशिस करेंगे।

आपको अपने प्रोग्राम में लिनक्स सिस्टम कॉल्स का उपयोग करने के लिए निम्नलिखित कदम उठाने की आवश्यकता है -

  • EAX रजिस्टर में सिस्टम कॉल नंबर डालें।
  • रजिस्टरों EBX, ECX, आदि में सिस्टम कॉल के तर्कों को स्टोर करें।
  • निर्देश पूरा करने के लिए (80h) पर कॉल करें।
  • जो भी इस कोड के रन होने पर रिजल्ट आता है वो आमतौर पर EAX रजिस्टर में स्टोर होता है।

यह छह रजिस्टर (EBX, ECX, EDX, ESI, EDI, and EBP) सिस्टम कॉल के तर्कों को संग्रहीत करने में उपयोग होते है। ये रजिस्टर EBX रजिस्टर से शुरू होकर लगातार आर्ग्युमेंट लेते हैं। यदि छह से अधिक तर्क हैं, तो पहले तर्क का स्मृति स्थान EBX रजिस्टर में संग्रहीत किया जाता है।

कुस सिस्टम कॉल nasm असेम्ब्ली निर्देश।


mov	eax,1		; सिस्टम कॉल नंबर (sys_exit)
mov	eax,4		; सिस्टम कॉल नंबर (sys_write)
int	0x80		; कॉल कर्नेल  

सभी syscalls उनकी संख्या के साथ /usr/include/asm/unistd.h में (आपके द्वारा 80h पर कॉल करने से पहले EAX में रखा गया मान) सूचीबद्ध हैं

सिस्टम कॉल्स टेबल

इस टेबल में ट्यूटोरियल में प्रयुक्त कुछ सिस्टम कॉल्स को दिखाया गया है -


%eax Name %ebx %ecx %edx %esx %edi
1 sys_exit int - - - -
2 sys_fork struct pt_regs - - - -
3 sys_read unsigned int char * size_t - -
4 sys_write unsigned int const char * size_t - -
5 sys_open const char * int int - -
6 sys_close unsigned int - - - -

उदाहरण - निम्न उदाहरण कीबोर्ड से एक संख्या इनपुट लेता है और इसे स्क्रीन पर प्रदर्शित करता है


 section .data                           ;डाटा सेगमेंट
   userMsg db 'Please enter a number: ' ;इनपुट संदेश
   lenUserMsg equ $-userMsg             ;संदेश की लंबाई
   dispMsg db 'You have entered: '
   lenDispMsg equ $-dispMsg                 

section .bss           ;अप्रारंभीकृत डेटा
   num resb 5
	
section .text          ;कोड सेगमेंट
   global _start
	
_start:                ;उपयोगकर्ता इनपुट प्रॉम्प्ट
   mov eax, 4
   mov ebx, 1
   mov ecx, userMsg
   mov edx, lenUserMsg
   int 80h

   ;उपयोगकर्ता इनपुट पढ़ें और स्टोर करें
   mov eax, 3
   mov ebx, 2
   mov ecx, num  
   mov edx, 5          ;5 bytes (numeric, 1 for sign) of that information
   int 80h
	
   ;संदेश आउटपुट करें 'The entered number is: '
   mov eax, 4
   mov ebx, 1
   mov ecx, dispMsg
   mov edx, lenDispMsg
   int 80h  

   ;दर्ज संख्या को आउटपुट करें
   mov eax, 4
   mov ebx, 1
   mov ecx, num
   mov edx, 5
   int 80h  
    
   ; कोड से बाहर निकलें
   mov eax, 1
   mov ebx, 0
   int 80h
        

जब उपरोक्त कोड असेम्ब्ल और रन किया जाता है, तो यह निम्न परिणाम प्राप्त होता है -

Please enter a number - 
1234  
You have entered - 4321 
Read in- English
Tags- Assembly - System Calls in hindi, System calls are APIs i Assembly, assembly language full corse, nasm, System Calls Example
कोई टिप्पणी नहीं:
एक टिप्पणी भेजें