विकिपीडिया से आने वाले इस उदाहरण का उपयोग करते हुए , जिसमें DrawSquare () कॉललाइन () कहते हैं,
(ध्यान दें कि इस आरेख में सबसे नीचे उच्च पते हैं और शीर्ष पर निम्न पते हैं।)
क्या कोई मुझे समझा सकता है कि इस संदर्भ में क्या हैं ebp
और क्या esp
हैं?
मैं जो देखता हूं, उससे कहता हूं कि स्टैक पॉइंटर पॉइंट्स हमेशा स्टैक के शीर्ष पर होते हैं, और बेस पॉइंटर को वर्तमान फ़ंक्शन की शुरुआत में? और क्या?
संपादित करें: मेरा मतलब है कि विंडोज़ कार्यक्रमों के संदर्भ में
edit2: और कैसे eip
काम करता है?
edit3: मेरे पास MSVC ++ से निम्न कोड है:
var_C= dword ptr -0Ch
var_8= dword ptr -8
var_4= dword ptr -4
hInstance= dword ptr 8
hPrevInstance= dword ptr 0Ch
lpCmdLine= dword ptr 10h
nShowCmd= dword ptr 14h
यह सभी एक दूसरे के लिए 4 बाइट्स लेते हैं। इसलिए मैं देख सकता हूँ कि hInstance से 4 बाइट्स के var_4 में एक अंतर है। वे क्या हैं? मुझे लगता है कि यह वापसी का पता है, जैसा कि विकिपीडिया की तस्वीर में देखा जा सकता है?
(संपादक का नोट: माइकल के जवाब से एक लंबा उद्धरण हटा दिया गया, जो प्रश्न में नहीं है, लेकिन एक अनुवर्ती प्रश्न संपादित किया गया था):
ऐसा इसलिए है क्योंकि फ़ंक्शन कॉल का प्रवाह है:
* Push parameters (hInstance, etc.)
* Call function, which pushes return address
* Push ebp
* Allocate space for locals
मेरा सवाल (आखिरी, मुझे आशा है!) अब है, क्या वास्तव में क्या होता है मैं उस फ़ंक्शन के तर्कों को पॉप करता हूं जिसे मैं प्रोलॉग के अंत तक कॉल करना चाहता हूं? मैं जानना चाहता हूं कि उन क्षणों के दौरान ईबीपी, एसपी कैसे विकसित होते हैं (मैं पहले से ही समझ गया था कि प्रोलॉग कैसे काम करता है, मैं सिर्फ यह जानना चाहता हूं कि स्टैक पर तर्क को धक्का देने और प्रोलॉग से पहले) के बाद क्या हो रहा है।