2011-08-21 11 views
7

मैं 'मजेदार' के लिए विंडोज़ पर x64 असेंबली सीख रहा हूं। MSDN documentation for the x64 calling convention on Windows का कहना है:Win64 एबीआई में, क्या आरक्षित तर्क स्टैक स्पेस सामान्य उद्देश्य भंडारण के लिए उपयोग किया जा सकता है?

फोन करने वाले कॉल प्राप्त करने वाला पैरामीटर के लिए जगह आवंटित करने के लिए जिम्मेदार है, और हमेशा 4 रजिस्टर मानकों के लिए पर्याप्त स्थान आवंटित चाहिए, भले ही कॉल प्राप्त करने वाला है कि कई मापदंडों जरूरत नहीं है। यह सी unprototyped कार्यों, और vararg सी/सी ++ कार्यों का समर्थन करने की सादगी में सहायता करता है।

जैसा कि मेरे कार्यों सी unprototyped कार्यों नहीं हैं या varargs C/C++ काम करता है, इसका मतलब मैं हमेशा अपने समारोह के भीतर सामान्य प्रयोजन भंडारण के लिए (सही एक फोन के बाद rsp के असंशोधित मूल्य मानकर) [rsp+32] करने के लिए [rsp+8] उपयोग कर सकते हैं करता है , स्थानीय चर के लिए पसंद है?

उत्तर

6

हां, आप किसी भी उद्देश्य के लिए इनबाउंड पैरामीटर स्क्रैच स्पेस का उपयोग कर सकते हैं। लेकिन आप इसे पहले ही जानते थे: ऐसा करने के लिए अनुमति पहले से ही इनबाउंड पैरामीटर को संशोधित करने की वैधता से निहित है।

void somefunction(int arg1) 
{ 
    arg1 = anyvalue; // mov [rsp+8], anyvalue 
} 
+0

स्पष्ट उत्तर के लिए धन्यवाद के बारे में माफी चाहता हूँ। हालांकि इनबाउंड पैरामीटर को संशोधित करना 'mov rcx, anyvalue' होगा क्योंकि तर्क 'आरसीएक्स' के माध्यम से पारित किया गया है, यही कारण है कि मैं '[rsp + 8]' के बारे में अनिश्चित था। – Trillian

+3

लेकिन आपको इनबाउंड पैरामीटर को फैलाने की भी अनुमति है। यही कारण है कि आरक्षित जगह, सब के बाद है। 'शून्य निष्पादन (int arg1) {/ * spill: mov [rsp + 8], rcx */arg1 = anyvalue;/* mov [आरएसपी +8], किसी भी समय * /} ' –

1

मुझे लगता है कि वह क्या करने के लिए कोशिश कर रहा है इस तरह कुछ और है:

*(decltype(&anyvalue))((PBYTE)&arg1+8) = anyvalue; // mov [rsp+8+8], anyvalue 

जहां तक ​​मैं समझता हूँ, माइक्रोसॉफ्ट कहा गया है कि आप कॉल प्राप्त करने वाला चार स्टोर करने के लिए के लिए पर्याप्त जगह आवंटित करने के लिए आवश्यक हैं रजिस्ट्रार (आरसीएक्स, rdx, r8। r9), यहां तक ​​कि एक फ़ंक्शन में जो केवल एक तर्क (आरसीएक्स में) लेता है।

नोट: मैं बदसूरत सी कोड और ओल्ड-स्कूल कास्टिंग नई decltype कीवर्ड के साथ मिश्रित

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