2010-03-17 12 views
10

के लिए एक स्टैक फ्रेम तैयार करना तो, मैं अपने असेंबली कोड के लिए एक स्टैक फ्रेम खींचने के बारे में उलझन में हूं। मुझे एहसास है कि मैंने गलत शुरुआत की है।x86 असेंबली

यहां तक ​​कि मुझे अब तक क्या मिला है, लेकिन जैसा कि आप देख सकते हैं कि मैं चरण 5 पर उलझन में हूं, क्योंकि मुझे लगता है कि मेरा प्रारंभिक लेआउट गलत है।

enter image description here enter image description here

आप मुझे बता सकते हैं जहां मैं गलत हो गया?

उत्तर

25

मुझे लगता है कि मैं एक आरेख से शुरू करूंगा जो ढेर के "शीर्ष" पर कुछ खाली (अर्द्ध) मनमानी खाली जगह दिखाता है, और संभवतः बाएं ओर ईबीपी और ईएसपी प्रदर्शित करता है, जहां तीर दिखाए जाते हैं वे इशारा कर रहे हैं। मैंने "पॉइंट टू" के लिए ठोस तीरों का उपयोग किया है और डेटा आंदोलन के लिए धराशायी (पीछे की ओर, यह विपरीत हो सकता है)।

alt text

+0

वाह, यह अच्छा चित्र है। इसे आकर्षित करने के लिए आपने किस कार्यक्रम का उपयोग किया? मैं कल इसे देख लूंगा - क्योंकि मेरा दिमाग आज रात तला हुआ है। – drozzy

+3

एक शब्द में, विजिओ। –

+0

मुझे लगता है कि चित्र बाएं से दाएं शीर्ष-से-नीचे अभिविन्यास में हैं। तो मुझे यकीन नहीं है कि तीसरे आरेख में कैसे - आपके पास ईबीपी और ईएसपी दोनों ही शुरुआती पते पर इंगित करते हैं। मेरा मतलब है कि पिछले आरेख में वे अलग थे। – drozzy

2

वर्तमान ईबीपी (एक बार यह एएसपी से कैप्चर हो जाने के बीच) और वाई इस मामले में वास्तव में 8 बाइट्स के बीच की दूरी है क्योंकि आपके पास स्टैक पर पिछले ईबीपी का रिटर्न ईप और मान है। आपका आरेख सही है जो मैं बता सकता हूं कि बाएं हाथ के पते अधिक भ्रमित हैं :)

0

आप अपने आरेख के साथ सही हैं। कंपाइलर कुछ अनुकूलन चाल का उपयोग करता है: पहला कॉल "काफी सामान्य" है, वास्तव में "एफ" पैरामीटर स्टैक के शीर्ष पर रखा गया है। दूसरी कॉल स्थानीय संदर्भ सफाई (निर्देश "छोड़ें") के बाद स्थगित कर दी गई है, और "एच" फ़ंक्शन का पैरामीटर "2" रखने के लिए "पुनर्नवीनीकरण" है। "एफ" से दूसरे "कॉल" की तुलना में एक साधारण "jmp" बन जाता है, क्योंकि यह कॉलिंग फ़ंक्शन "एच" ("एच" का संदर्भ पहले से ही "छोड़ें" से फेंक दिया गया है) में बहुत पिछली पंक्ति है।

अलविदा!

1

आरेख वापसी पता, जो वास्तव में गलत है नीचे पैरामीटर दिखाती है।

यह मानते हुए कि स्टैक पर पैरामीटर डालने की आवश्यकता होने पर स्टैक कम पते की ओर बढ़ता है, वे वापसी पते की तुलना में उच्च पते पर रहते हैं।

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