2011-08-04 16 views
6

मेरी disassembled कोड देख में मैं निम्न में से एक बहुत कुछ देखें:विधि कॉल करने से पहले ली निर्देश क्या है?

00B442E9 push  4 
00B442EB push  3 
00B442ED lea   ecx,[ebp-24h] 
00B442F0 call  Foo::Bar (0B41127h) 

मैं कॉल करने से पहले मानकों धक्का समझते हैं, लेकिन क्या lea यहां क्या कर रहा है?

उत्तर

11

thiscall बुला x86 के लिए विज़ुअल सी द्वारा ++ इस्तेमाल किया सम्मेलन में से केवल एक अनुकूलित फार्म, this सूचक ecx रजिस्टर में पारित हो जाता है है। यह lea निर्देश सदस्य फ़ंक्शन को कॉल करने से पहले पॉइंटर ecx रजिस्टर में प्रतिलिपि बनाता है।

आप स्टैक ओवरफ़्लो सवाल "What's the purpose of the LEA instruction?"

+0

में lea अनुदेश के बारे में सभी को पढ़ सकता है एक कारण यह बस के रूप में अच्छी तरह से ढेर पर धकेल दिया नहीं है? –

+1

मुझे नहीं पता। g ++ 'thiscall' अंतिम तर्क के बाद स्टैक पर 'इस' को धक्का देता है। अगर मुझे लगता है कि किसी ने शायद प्रदर्शन विश्लेषण किया है और फैसला किया है कि 'इस' को पूर्ववत करने के लिए सामान्य उपयोग मामलों में बेहतर प्रदर्शन हुआ। –

2

मुझे लगता है कि यह

mov ecx, ebp 
sub ecx, 24h 
संबंधित मुद्दे