2012-01-13 16 views
5

में इनलाइन असेंबली को प्रतिबंधित करें topcoder.com, SPOJ जैसी समस्या निवारण साइटें हैं। मुझे कुछ प्रतिबंधों के लिए समान उपयोग-मामले (लोग मुझे सी ++ प्रोग्राम फाइल भेजते हैं) के लिए पसंद करेंगे।g ++ (gcc) या clang (llvm)

उन लोगों में से एक है:

मैं कैसे इस तरह के निषेध लागू कर सकते हैं "में लाइन विधानसभा का उपयोग कर अनुमति नहीं है"? स्रोत कोड में वाक्यांशों की खोज करने की तुलना में क्या कोई आसान तरीका है (जैसे कंपाइलर झंडे? - लेकिन मुझे कोई उपयोगी नहीं मिला है)?

मैं लोगों को जी ++ या क्लैंग तक सीमित कर सकता हूं। लिनक्स पर चीजें हो रही हैं।

+0

क्यों आप ऐसा करना चाहते हैं? यदि आप सुरक्षा के बारे में चिंतित हैं तो इनलाइन एएसएम को प्रतिबंधित करना ज्यादा मदद नहीं करता है। – servn

+0

@servn ठीक है। लेकिन मैं केवल सुरक्षा के बारे में चिंतित नहीं हूं, बल्कि उचित सी/सी ++ प्रतियोगिता। मैं लोगों को एएसएम का उपयोग करने से रोकना चाहता हूं, सिर्फ इसलिए कि हमने इस तरह के नियम के बारे में फैसला किया है। मैं ऐसी नीति की प्रक्रिया को स्वचालित बनाना चाहता हूं। मैं समझता हूं कि यह पूर्ण समाधान नहीं है और इसके लिए और आवश्यकता है। इस पर ध्यान दिलाने के लिए धन्यवाद। शायद आपके पास कुछ और विचार हैं? यदि सुरक्षा में दिलचस्पी है, तो कृपया मेरे अन्य प्रश्न देखें: [Security.SE] (http://security.stackexchange.com/users/4077?tab=questions) –

उत्तर

0

ऐसा लगता है कि आप -fno-asm ध्वज की तलाश में हैं।

हालांकि ऐसा लगता है कि करने के बजाय asm भी ऐसा लगता है तो शायद -D__asm__=something_that_will_error पर जोड़ें।

सी ++ में asm को बंद करने के लिए -fno-gnu-keywords पर भी देखें।

+1

जीसीसी 4.4.6 लिनक्स के तहत मैनपेज का तात्पर्य यह इंगित करता है कि यह अक्षम नहीं है '__asm__'। – Alnitak

4

कैसे के बारे में:

% gcc -Dasm=error -D__asm__=error 
+0

यह कैसे काम करता है? मैं समझता हूं कि यह नामों के साथ मैक्रोज़ बनाता है: 'asm', '__asm__'। शेडिंग बिल्ड-इन कीवर्ड की अनुमति है? क्या मैं फ़ंक्शन कॉल को प्रतिबंधित करने के लिए ऐसा ही कर सकता हूं (जैसे "सिस्टम()")? क्या यह सुरक्षित समाधान है - इसे हल करने का कोई तरीका नहीं है (हैक)? –

+1

@GrzegorzWierzowiecki प्रीप्रोसेसर को संकलक से पहले कोड पर अपना हाथ मिलता है, और कीवर्ड का कोई ज्ञान नहीं है, इसलिए हाँ, यह उन्हें बदल सकता है। इसे चारों ओर काम किया जा सकता है - कोड में एक सरल '#undef asm' ऐसा करेगा। हालांकि यह खोजना आसान होगा। – Alnitak

+0

प्रत्येक बार जब मैं [इंटरनेशनल ओबफस्केटेड सी कोड प्रतियोगिता] (http://www.ioccc.org/) देखता हूं, तो मैं अधिक से अधिक डरता हूं कि चीजों को खराब करने के तरीके हैं, जैसे '#undef asm'। –

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