Wikipedia के अनुसार इंटेल एबीआई EAX
, ECX
और EDX
का उपयोग किसी फ़ंक्शन में संरक्षित किए बिना करने की अनुमति देता है।
मुझे यकीन नहीं है कि "इंटेल एबीआई" का क्या अर्थ है। क्या इसका मतलब यह है कि इंटेल सीपीयू को लक्षित करने वाले सभी कंपाइलर्स द्वारा इसे लागू/लागू किया जाता है? मैं एक असेंबली फ़ंक्शन लिख रहा हूं जिसे सी कोड से बुलाया जाएगा। क्या मैं इसे सभी कंपाइलरों के लिए मान सकता हूं? (मैं इस समय केवल x86
को लक्षित कर रहा हूं)फ़ंक्शन में उपयोग करने के लिए कौन से रजिस्ट्रार सुरक्षित हैं (x86)
उत्तर
इंटेल एबीआई इंटेल द्वारा स्थापित एक कॉलिंग सम्मेलन है।
सामान्य तौर पर, कैसे पैरामीटर पारित कर रहे हैं और जो रजिस्टरों बचाया या एक समारोह कॉल के दौरान ट्रैश किए जाते हैं समारोह के कॉलिंग सम्मेलन द्वारा परिभाषित किया गया है:
http://en.wikipedia.org/wiki/Calling_convention
__cdecl, __stdcall के लिएविशेष रूप से और आप __fastcall ईएक्स, ईसीएक्स और ईडीएक्स को ट्रैश किए जाने की उम्मीद करनी चाहिए, और आपके फ़ंक्शन को अन्य रजिस्टरों को सुरक्षित रखना चाहिए और ईएक्स (या ईडीएक्स: 64-बिट रिटर्न के लिए ईएक्स) पर वापस जाना चाहिए।
यदि आपको नहीं पता कि आपको किस कॉलिंग सम्मेलन का उपयोग करना चाहिए, तो आपको असेंबली में लिखना नहीं चाहिए, क्योंकि कॉलिंग सम्मेलन को गड़बड़ करने से आपके आवेदन में शोषक बग हो सकता है।
सी में, डिफ़ॉल्ट कॉलिंग सम्मेलन सामान्य रूप से __cdecl है और विंडोज निर्यातित एपीआई के लिए यह सामान्यतः __stdcall है।
यह इंटेल एप्लिकेशन बाइनरी इंटरफ़ेस है, नियमों का एक सेट है जो रजिस्ट्रारों को सहेजे बिना उपयोग के लिए उपलब्ध है, स्टैक पर तर्क कैसे धकेलते हैं, कॉलर या कैली साफ़ करता है ढेर फ्रेम और इतने पर।
यदि आप जानते हैं कि नियमों का पालन किया जा रहा है, तो यह ठीक है। मैं बस मामले में सबकुछ बचाता हूं (उन चीज़ों के अलावा जो मैं पाठ्यक्रम की जानकारी लौटने के लिए उपयोग कर रहा हूं)।
लेकिन यह सभी कंपाइलरों के लिए जरूरी नहीं है और आप तब तक सोचने के लिए मूर्ख नहीं होंगे जब तक कि संकलक विशेष रूप से यह कहता न हो।
- 1. सी में x86 फ़ंक्शन कॉल के बाद कौन से रजिस्टरों को पुनर्स्थापित किया जाता है?
- 2. नोड में कौन से ऑपरेशन थ्रेड सुरक्षित हैं?
- 3. निर्माण करने के लिए कौन सी सीपीयू का उपयोग करना है (x86 x64 या AnyCpu)?
- 4. क्लिकऑन के लिए कौन से विकल्प हैं?
- 5. रजिस्ट्रार
- 6. क्या यूआरएल में उपयोग करने के लिए आईडी (मोंगो से ऑब्जेक्ट आईडी) सुरक्षित हैं?
- 7. x86 असेंबली का उपयोग कर फर्थ में स्क्वायर रूट फ़ंक्शन?
- 8. निर्भरताप्रॉपर्टी। रजिस्ट्रार() या। रजिस्ट्रार एटैच()
- 9. मोबाइल उत्तरदायी डिजाइन बनाने में उपयोग करने के लिए सबसे महत्वपूर्ण मीडिया प्रश्न कौन से हैं?
- 10. गिट के साथ काम के लिए मौजूदा Emacs मॉड्यूल में कौन से फ़ंक्शन गुम हैं?
- 11. तारों से सुरक्षित रूपांतरण के लिए हेल्पर फ़ंक्शन
- 12. मोंगो ऑब्जेक्टिड्स: जंगली में उपयोग करने के लिए सुरक्षित?
- 13. x86 असेंबलर के लिए कौन सी इकाई परीक्षण ढांचे उपलब्ध हैं?
- 14. सेगमेंटेशन रजिस्ट्रार
- 15. सेवा में उपयोग करने के लिए कौन सा संदर्भ?
- 16. बूस्ट :: बाइंड का उपयोग कर सुरक्षित सुरक्षित से अधिक तर्क पारित करने के लिए है?
- 17. नियमित अभिव्यक्तियों का उपयोग करने के लिए कौन से मामले बेहतर हैं?
- 18. होस्टिंग कंपनी या रजिस्ट्रार
- 19. कार्यक्षमता द्वारा x86 निर्देशों के लिए संदर्भ
- 20. एक पीडीएफ फाइल में आईपीथॉन नोटबुक निर्यात करने के लिए कौन से टूल्स उपलब्ध हैं?
- 21. x86
- 22. लिनक्स डिवाइस ड्राइवरों में फ़्लोटिंग-पॉइंट का उपयोग करने के लिए कोडिंग सम्मेलन क्या हैं?
- 23. सूची को स्टोर करने के लिए सुरक्षित :: बाद में उपयोग के लिए iterator?
- 24. वैश्विक डॉलर संकेत का उपयोग करने के लिए कौन सी जावास्क्रिप्ट पुस्तकालय ज्ञात हैं: विंडो। $?
- 25. EDT के बाहर Component.repaint() का उपयोग करने के लिए सुरक्षित?
- 26. ShellExecute विफल करने के कौन से कारण हो सकते हैं?
- 27. आईफोन के माध्यम से क्रेडिट कार्ड भुगतान स्वीकार करने के लिए कौन से विकल्प उपलब्ध हैं?
- 28. ग्लिबैक में कौन सा फ़ंक्शन मुख्य फ़ंक्शन
- 29. PHP के मूल कार्यों को unfiltered इनपुट के साथ उपयोग करने के लिए कितने सुरक्षित हैं?
- 30. .NET में से कौन सा हैशिंग एल्गोरिदम पासवर्ड हैशिंग के लिए पर्याप्त सुरक्षित है?
मुझे कॉलिंग कन्वेंशन पता है जिसे मुझे उपयोग करने की आवश्यकता है, और इसका अर्थ यह है कि पैरामीटर के आदेश और स्टैक क्लीनअप के रूप में इसका अर्थ है। मुझे रजिस्टरों के बारे में पता नहीं था। क्या आप जानते हैं कि कौन से कंपाइलर्स इस एबीआई का पालन करते हैं? MSVC/जीसीसी? – baruch
@baruch कम से कम एमएसवीसी के लिए, कॉलिंग सम्मेलन फ़ंक्शन प्रोटोटाइप में निर्दिष्ट है। कंपाइलर इसे देखता है और सही काम करता है। पूर्व में, WSARecv की def इस 'int WSAAPI WSARecv' की तरह शुरू होती है। 'WSAAPI' हल करता है (कई #defines के माध्यम से) __stdcall तक। –
@MarcSherman मुझे कॉलिंग सम्मेलन के बारे में पता है, लेकिन कॉलिंग सम्मेलन का रजिस्टर संरक्षण हिस्सा है? – baruch