मुझे थोड़ी देर के लिए jmp निर्देश के बारे में पता चला है, लेकिन यह मुझे कभी भी असुरक्षित रूप से असुरक्षित होने के रूप में कभी नहीं मारा। मुझे हाल ही में सीआईएल चश्मा और was very surprised to discover jmp is considered unverifiable की जांच करने का कारण था।सीएलआर का जेएमपी निर्देश अविश्वसनीय क्यों है?
उत्तर
वजह से, के विपरीत call
, callvirt
, या calli
, जहां फोन करने वाले का ढेर फ्रेम ढेर पर बना रहेगा भविष्य कोड पहुँच सुरक्षा stackwalks द्वारा देखा जा करने के लिए शुरू हो रहा है (शायद परोक्ष रूप से) कॉल प्राप्त करने वाला द्वारा एक, एक jmp
अनुदेश नीचे आँसू फोन करने वाले का कैली में संक्रमण से पहले ढेर फ्रेम और कैलिली ट्रिगर कर सकते हैं कि किसी भी सीएएस स्टैकवॉक के लिए अदृश्य है।
संपादित करें: मुझे लगता है कि नाकाबिंग गलत होने के उत्तर के बारे में सही है। अब मुझे लगता है कि (सत्यापन योग्य) tail.call अनुक्रमों और (अविश्वसनीय) जेएमपी अनुक्रमों के बीच का अंतर यह हो सकता है कि एक पूंछ कॉल को तर्क स्टैक पर कॉल को तर्कों को धक्का देने की आवश्यकता होती है जहां उन्हें सामान्य तरीके से सत्यापित किया जा सकता है, जबकि jmp
मूल्यांकन स्टैक को रिक्त होने की आवश्यकता होती है और कूद-ई के कूद-एआर के तर्कों का उत्तराधिकारी बनने का कारण बनता है। jmp
निर्देशों की जांच करने के लिए सत्यापनकर्ता को जटिल करने का शायद कोई कारण नहीं था, लेकिन tail.call
अनुक्रमों पर लगाए गए शर्तों के समान ऐसा करना संभव हो सकता है (जिसमें से एक है कि कॉलर और कैली एक ही असेंबली में होना चाहिए, जो नियम मेरे सीएएस अनुमान ऊपर, कम से कम .Deny()
कॉल तक)। (विभाजन तृतीय, धारा 3,37)
वर्तमान तर्क गंतव्य विधि के लिए स्थानांतरित कर रहे हैं:
यदि हां, तो इस कल्पना के प्रासंगिक हिस्सा होगा।
मूल्यांकन स्टैक खाली होना चाहिए जब यह निर्देश निष्पादित किया जाता है। कॉलिंग सम्मेलन, नंबर और प्रकार गंतव्य पते पर तर्क मौजूदा विधि से मेल खाना चाहिए।
पहली बार ब्लश पर उचित होने पर, यह निकट जांच के लिए खड़ा नहीं है। द।tailcall उपसर्ग लगभग समान व्यवहार है, यद्यपि अधिक सामान्य, लेकिन .tailcall सत्यापित करने योग्य है। प्रलेखन बस बताता है कि अविश्वसनीय से विश्वसनीय कोड पर कॉल करते समय। टेलकॉल को अनदेखा किया जाता है। यदि यही कारण है कि jmp अविश्वसनीय है, तो मुझे नहीं लगता कि वे jmp के लिए एक ही व्यवहार का उपयोग क्यों नहीं करते थे। – naasking
बहुत अच्छा मुद्दा, धन्यवाद नास्किंग। –
मुझे लगता है कि "रॉड्रिगो कुम्पेरा" जो लिंक किए गए ब्लॉग पेज पर पोस्ट करते हैं, यह सही है: यदि कोई भी तर्क उप-रेफरी है, तो आप स्थानीय के संदर्भ को एक जंप निष्पादित कर सकते हैं। एक अपेक्षाकृत सरल एक यद्यपि यह सुनिश्चित करने के लिए एक नियंत्रण प्रवाह विश्लेषण की आवश्यकता नहीं है। मैं डरता था कि वे परेशान नहीं होना चाहते थे क्योंकि जेएमपी मुख्य रूप से सी ++ का समर्थन करने के लिए जोड़ा गया था। .टेलकॉल के लिए भी यही खतरा मौजूद है, इसलिए मुझे यकीन नहीं है कि यह कैसे संभाला जाता है, यानी। अविश्वसनीय, या .tailcall अनदेखा। मुझे इसे किसी बिंदु पर परीक्षण करना होगा। – naasking
- 1. जेएमपी निर्देश - हेक्स कोड
- 2. स्विच_ओ को सीधे जेएमपी के बजाय ईआईपी बदलने के लिए पुश + जेएमपी + रीट का उपयोग क्यों करता है?
- 3. प्रत्येक एएसएम निर्देश का आकार क्या है?
- 4. 'अविश्वसनीय कोड' क्या है और यह बुरा क्यों है?
- 5. सीएलआर
- 6. सीपीयू शाखा निर्देश क्यों धीमा है?
- 7. सीएलआर 2.0 और सीएलआर 4.0
- 8. सीएलआर
- 9. सीएलआर
- 10. सीएलआर
- 11. सीएलआर
- 12. innodb की शो तालिका स्थिति इतनी अविश्वसनीय क्यों है?
- 13. क्या कोई सीएलआर है जो सीएलआर पर चलता है?
- 14. सीएलआर
- 15. सीएलआर होस्टिंग क्या है?
- 16. अविश्वसनीय जावास्क्रिप्ट
- 17. सीएलआर सी #
- 18. एंड्रॉइड कंपास अविश्वसनीय लगता है
- 19. अविश्वसनीय पाठ
- 20. x64 सीएलआर पर क्यों संपादित और जारी नहीं है?
- 21. असेंबली में रिलेटिव बनाम पूर्ण जेएमपी
- 22. पीएलडी निर्देश का उपयोग
- 23. सीएलआर 2 एप्लिकेशन को सीएलआर 4 एप्लिकेशन
- 24. कोई #if 1 सी प्रीप्रोसेसर निर्देश का उपयोग क्यों करेगा?
- 25. 'अविश्वसनीय' उपयोगकर्ताओं से एल्गोरिदम का मूल्यांकन
- 26. {$ C PRELOAD} निर्देश का अर्थ क्या है?
- 27. सीएलआर आईडी
- 28. एसक्यूएल सर्वर सीएलआर
- 29. एसक्यूएल सीएलआर
- 30. सी ++ सीएलआर
इस किया जाएगा क्योंकि यह तो गंतव्य कोड ब्लॉक करने के लिए सिले वर्तमान आंशिक रूप से कोड ब्लॉक के निष्पादन के प्रभाव ... ढेर के बारे में कुछ पुष्टि नहीं कर सके/ढेर पर नज़र रखने के अपने छोटे से मन की तरंग में झंडा करने लगता है .. यह नहीं कि मैं निश्चित रूप से यह निश्चित रूप से जानता हूं ... हालांकि यह तुरंत जानकारी से ऑफसेट है ... http://msdn.microsoft.com/en-us/library/system.reflection.emit.opcodes.jmp .aspx ... जो स्पष्ट रूप से बताता है कि कोई स्टैक जानकारी ट्रैक/स्थानांतरित नहीं होती है। शायद "फ्रंट एंड" के नीचे कुछ ऐसा है जो माइक्रोसॉफ्ट छुपा रहा है। – War
मुझे नहीं पता कि यह अविश्वसनीय क्यों है, लेकिन मेरे पास जानकारी का एक दिलचस्प हिस्सा है। हमारा ईक्यूएटीसी प्रोफाइलर प्रोफाइल के सभी कोड के बारे में अज्ञात आंकड़े एकत्र करता है (EQATEC Analytics, btw का उपयोग करके)। चूंकि जेएमपी मुश्किल था और प्रोफाइलर द्वारा बेहतर तरीके से संभाला नहीं गया था, हमने यह ट्रैक करने का फैसला किया कि यह वास्तव में कितनी बार हुआ। अब हमारे पास 2 मिलियन से अधिक प्रोफाइल हैं, जो 1 मिलियन से अधिक प्रोफाइल असेंबली से एकत्र हुए हैं, कुल 20 बिलियन सीआईएल निर्देश हैं। काफी। और कितने जंप थे? कोई नहीं! हां, हमारे किसी भी उपयोगकर्ता के ऐप्स (एनईटीसीएफ, एसएल, डब्ल्यूपी 7, एफ # आदि) में एक जेएमपी कभी नहीं हुआ है। काफी आश्चर्य है। –
मैं वास्तव में भी आश्चर्यचकित नहीं हूं। कोई संकलक मुझे पता नहीं है कि शायद प्रबंधित सी ++ jmp निर्देश को छोड़ देता है, क्योंकि यह अविश्वसनीय है। विश्वसनीय वर्ग पुस्तकालयों में jmp का कोई भी उपयोग squirreled हो सकता है। – naasking