सी

2013-02-08 8 views
6

में फ़ंक्शन प्रलोभन और एपिलॉग मुझे पता है कि नेस्टेड फ़ंक्शन कॉल में डेटा स्टैक पर जाता है। स्टैक स्वयं स्टैक से डेटा को संग्रहीत करने और पुनर्प्राप्त करने के लिए चरण-दर-चरण विधि लागू करता है क्योंकि फ़ंक्शंस कॉल या रिटर्न होते हैं। नाम इन तरीकों में से ज्यादातर प्रस्तावना और एपिलॉग के रूप में जाना जाता है।सी

मैंने इस विषय पर सामग्री खोजने के लिए कोई सफलता नहीं की कोशिश की। क्या आप लोगों को किसी भी संसाधन (साइट, वीडियो, आलेख) के बारे में पता है कि सी में आम तौर पर कार्यप्रणाली और उपन्यास कैसे कार्य करता है? या यदि आप समझा सकते हैं तो भी बेहतर होगा।

पीएस: मुझे बस कुछ सामान्य दृश्य चाहिए, बहुत विस्तृत नहीं।

+0

आप कंपेलरों और कोड पीढ़ी पर सामग्री की खोज कर सकते हैं। –

उत्तर

13

वहाँ बाहर है कि यह समझाने संसाधनों की बहुत सारी हैं:

कुछ नाम हैं।

मूल रूप से, के रूप में आप कुछ हद तक वर्णन किया, "ढेर" कई उद्देश्यों के लिए एक कार्यक्रम के क्रियान्वयन में कार्य करता है:

  1. जहां पर लौटने के लिए का ट्रैक रखते हुए, जब एक समारोह
  2. स्थानीय चर का भंडारण बुला फ़ंक्शन कॉल के संदर्भ में
  3. कॉलिंग फ़ंक्शन से कॉलली तक तर्क पास करना।

प्रोजेज एक समारोह की शुरुआत में होता है। इसकी ज़िम्मेदारी बुलाए गए फ़ंक्शन के स्टैक फ्रेम सेट अप करना है। Epilog सटीक विपरीत है: यह एक समारोह में आखिरी होता है, और इसका उद्देश्य कॉलिंग (पैरेंट) फ़ंक्शन के ढेर फ्रेम को पुनर्स्थापित करना है।

आईए -32 (x86) cdecl में, ebp रजिस्टर फ़ंक्शन के स्टैक फ्रेम को ट्रैक रखने के लिए भाषा द्वारा उपयोग किया जाता है। esp रजिस्टर प्रोसेसर द्वारा स्टैक पर सबसे हालिया जोड़े (शीर्ष मूल्य) को इंगित करने के लिए उपयोग किया जाता है।

call निर्देश दो चीजें करता है: सबसे पहले यह वापसी पते को ढेर पर धक्का देता है, फिर यह फ़ंक्शन पर जा रहा है। call के बाद तुरंत, esp स्टैक पर वापसी पते पर इंगित करता है।

तो प्रस्तावना निष्पादित होने

push ebp   ; Save the stack-frame base pointer (of the calling function). 
mov ebp, esp ; Set the stack-frame base pointer to be the current 
        ; location on the stack. 
sub esp, N  ; Grow the stack by N bytes to reserve space for local variables 

इस बिंदु पर, हमने:

... 
ebp + 4: Return address 
ebp + 0: Calling function's old ebp value 
ebp - 4: (local variables) 
... 

उपसंहार:

mov esp, ebp ; Put the stack pointer back where it was when this function 
        ; was called. 
pop ebp   ; Restore the calling function's stack frame. 
ret    ; Return to the calling function. 
-1

हर समारोह एक समान प्रस्तावना और उपसंहार (एक समारोह के समाप्त होने) (समारोह कोड का प्रारंभिक) है।

प्रस्तावना: प्रस्तावना की संरचना की तरह लग रही है: धक्का ईबीपी mov esp, ईबीपी

उपसंहार: प्रस्तावना की संरचना की तरह लग रही है: छोड़ सेवानिवृत्त

अधिक विस्तार से: what is Prologue and Epilogue

+0

कॉलिंग सम्मेलन पर निर्भर करता है –

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

  • कोई संबंधित समस्या नहीं^_^