enter image description here

गॉडबोल्ट (जीसीसी 9.3) ईडीआई में पारित होने वाले पैरामीटर को क्यों दिखाता है यदि सी ++ सीडीईसीएल कॉलिंग सम्मेलन का उपयोग करता है? मुझे इस पर कुछ नहीं मिल रहा है

2
user7318497 1 अप्रैल 2020, 03:32

1 उत्तर

सबसे बढ़िया उत्तर

RBP और RSP 64-बिट रजिस्टर हैं, जिसका अर्थ है कि आपका कोड 64-बिट के लिए संकलित किया जा रहा है, 32-बिट के लिए नहीं। cdecl एक 32-बिट कॉलिंग कन्वेंशन है, यह केवल 64-बिट में मौजूद नहीं है। 64-बिट सिस्टम पर, पहले कुछ पूर्णांक-आकार के पैरामीटर रजिस्टरों के माध्यम से पारित किए जाते हैं, कॉल स्टैक नहीं।

गैर-Windows प्लेटफ़ॉर्म पर (godbolt, Ubuntu का उपयोग करके Amazon EC2 उदाहरणों पर चलता है), पहले 6 पूर्णांक-आकार के पैरामीटर RDI, RSI, RDX, RCX, R8, और R9 से होकर गुजरते हैं। रजिस्टर, क्रमशः। EDI RDI का 0-3 बाइट्स है, और int आपके कंपाइलर में 4 बाइट्स है, इसलिए आप num पैरामीटर को EDI से गुजरते हुए देखते हैं।

विंडोज प्लेटफॉर्म पर, पहले 4 पूर्णांक-आकार के पैरामीटर क्रमशः RCX, RDX, R8, और R9 रजिस्टरों के माध्यम से पारित किए जाते हैं। EDI का उपयोग पैरामीटर पास करने के लिए नहीं किया जाता है।

देखें x86-64 पर स्टैक फ्रेम लेआउट अधिक जानकारी के लिए।

8
Remy Lebeau 1 अप्रैल 2020, 01:12