2010-06-11 14 views
8

मैं विंडोज़ के लिए लिनक्स के लिए लिखे गए एक स्क्रिप्ट इंजन को पोर्ट करना चाहता हूं; यह विनम्प के विज़ुअलाइजेशन प्लेटफॉर्म एवीएस के लिए है। मुझे यकीन नहीं है कि इस समय यह भी संभव है। जो मैं बता सकता हूं कि कोड सी कार्यों nseel_asm_atan और nseel_asm_atan_end के पते ले रहा है और उन्हें उस तालिका के अंदर संग्रहीत कर रहा है जो कोड निष्पादन के दौरान संदर्भित कर सकता है।क्या कोई __declspec (नग्न) कृपया समझा सकता है?

मैंने एमएस के दस्तावेज को देखा है, लेकिन मुझे यकीन है कि __declspec(naked) वास्तव में क्या करता है। प्रलेखन में उल्लिखित प्रोलॉग और एपिलॉग कोड क्या है? क्या यह विंडोज कॉलिंग सम्मेलनों से संबंधित है? क्या यह पोर्टेबल है? इसी तरह की तकनीकों का उपयोग कर किसी भी लिनक्स आधारित उदाहरणों के बारे में जानें?

static double (*__atan)(double) = &atan; 
__declspec (naked) void nseel_asm_atan(void) 
{ 
    FUNC1_ENTER 

    *__nextBlock = __atan(*parm_a); 

    FUNC_LEAVE 
} 
__declspec (naked) void nseel_asm_atan_end(void) {} 
+0

यह है कि वे क्या द्वारा prolog और उपसंहार मतलब है (मैं अगर यह 86 पर काम करता है देखने के लिए प्रयास नहीं किया है) msdn.microsoft.com/en-us/library/tawsa7cb(VS.80).aspx, मुझे पूरा यकीन है कि आप लिनक्स के लिए कुछ भी विस्तार करने के लिए '_declclpec (n)' परिभाषित कर सकते हैं। मुझे लगता है कि जीएनयू सी ++ कुछ _similar_ लागू करता है, लेकिन मुझे पूरा यकीन नहीं है कि यह मेरे सिर के ऊपर से क्या है। –

उत्तर

5

असल में फ़ंक्शन प्रस्तावना स्थानीय चर के लिए एक स्टैक फ्रेम सेट करता है और उपन्यास इसे साफ करने का ख्याल रखता है। यह आमतौर पर संकलक द्वारा स्वचालित रूप से किया जाता है। यदि आप __declspec(naked) का उपयोग करते हैं, तो यह स्टैक फ्रेम सेट अप आपके ऊपर होगा ताकि यह आपको अधिक लचीलापन प्रदान करे।

कई संदर्भ हैं: here, here, also here और अधिक।

जीएनयू जीसीसी संकलक भी नग्न का समर्थन करता है, लेकिन जाहिरा तौर पर नहीं x86 के लिए: http: // search for "naked" in the page

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