2012-06-25 18 views
12

Windows 8 आवेदन प्रमाणीकरण के लिए, वहाँ (दूसरे के बीच) कर रहे हैं सी ++ बिल्डर में सुरक्षित एक्सेप्शन हैंडलिंग सक्षम करें:इन आवश्यकताओं

  • 3,2 आपका एप्लिकेशन /SafeSEH ध्वज का उपयोग कर से निपटने सुरक्षित अपवाद सुनिश्चित करने के लिए संकलित किया जाना चाहिए
  • 3.3 आपका एप्लिकेशन डेटा निष्पादन
  • 3.4 आपका एप्लिकेशन पता स्थान लेआउट randomization के लिए /DYNAMICBASE ध्वज का उपयोग कर संकलित किया जाना चाहिए (ASLR)
को रोकने के लिए /NXCOMPAT ध्वज का उपयोग कर संकलित किया जाना चाहिए

मैं यह पता लगाने में सक्षम नहीं था कि सी ++ बिल्डर एक्सई में इनमें से किसी एक को कैसे सक्षम किया जाए।

/NXCOMPAT और /DYNAMICBASE के लिए, एक Cygwin से वी.एस. से editbin.exe या peflags.exe उपयोग कर सकते हैं। हालांकि, यदि संभवतः इन्हें सक्षम करने का मूल तरीका था, तो संभव साइड इफेक्ट्स के बारे में मुझे अधिक आत्मविश्वास महसूस होगा।

वैसे भी, मैं /SafeSEH के संबंध में पूरी तरह से नुकसान में हूं।

+2

निश्चित रूप से डेल्फी एक्सई 2 निष्पादन योग्य [सुरक्षित अपवाद हैंडलर टेबल्स] (http://www.jwsecure.com/2007/07/06/the-safe-exception-handler-table/) के साथ निष्पादन योग्य नहीं करता है। मेरे पास यह जांचने के लिए सीपीपीबिल्डर नहीं है लेकिन मैं शर्त नहीं लगाऊंगा। मुझे लगता है कि आप भाग्य से बाहर होंगे और एक क्यूसी अनुरोध जमा करना चाहिए। यह वास्तव में हो सकता है कि संरचित अपवाद हैंडलर सुरक्षित हैं लेकिन यदि आपके लिए पीई फाइलों को चिह्नित करने के लिए चिह्नित नहीं किया गया है तो यह आपके लिए अधिक उपयोग नहीं है। आपके 64 बिट ऐप्स ठीक होंगे, लेकिन सीपीपीबिल्डर में अभी भी यह संभव नहीं है। –

+0

प्रासंगिक क्यूसी रिपोर्ट: http://qc.embarcadero.com/wc/qcmain.aspx?d=106781 –

उत्तर

4

पहला,/सुरक्षितSEH केवल x86 पर लागू होता है, x64 या ARM नहीं। यह आवश्यक है कि आपका कंपाइलर अतिरिक्त कारण उत्पन्न करता है जो फ़ंक्शन पतों को इंगित करता है जिन्हें सुरक्षा कारणों से मान्य अपवाद हैंडलर माना जाता है। एक पतला मौका है कि आप इसे स्वयं कर सकते हैं, लेकिन इसकी आवश्यकता होगी कि आप अपने संकलित असेंबली कोड में fs:0 अपवाद हैंडलिंग श्रृंखला देखें और उस श्रृंखला पर कभी भी धक्का दिए गए सभी पते का आकलन करें, फिर उन्हें यहां दस्तावेज़ के रूप में वर्णित करें: http://msdn.microsoft.com/en-us/library/9a89h429(v=VS.80).aspx। एक (पतला) मौका है कि आपके कोड में वास्तव में कोई हैंडलर नहीं है, और वे सभी सी ++ बिल्डर के रनटाइम में हैं (अगर रनटाइम एक अलग डीएलएल है तो इसे आसान बना सकता है)।

आपको सुरक्षित + एस का समर्थन करने के लिए अपने कंपाइलर को अपडेट करने के लिए सी ++ बिल्डर को मनाने की कोशिश करनी चाहिए। यह चारों ओर XP SP2 के बाद से विंडोज मंच में हो गया है, और एक बहुत बुरा सुरक्षा छेद प्लग (अपवाद संचालक पते, 86 में ढेर पर मौजूद हैं बस किसी भी यादृच्छिक पता वहाँ निष्पादित करने के लिए डाल करने के लिए एक बफर अतिप्रवाह के लिए इंतज़ार कर) के लिए

1

/NXCOMPAT और /DYNAMICBASE से संबंधित मुद्दा है, मैं सी ++ बिल्डर लिंकर यहाँ इन चिह्नों का समर्थन करने के लिए एक अनुरोध बनाया है: https://quality.embarcadero.com/browse/RSP-13072

विज़ुअल सी से editbin.exe का उपयोग ++ शायद ही एक आदर्श समाधान है, और उनके लिंकर देशी रूप इन चिह्नों का समर्थन की जरूरत है।

अद्यतन: एक अतिरिक्त अनुरोध यहां सी ++ बिल्डर/डेल्फी क्रम फ़ाइलों के लिए बनाया गया है (DLLs/BPLs), इन झंडे पहले से ही सेट के साथ वितरित करने के लिए इतनी के रूप में दृश्य C++ से EDITBIN उपयोग करने के लिए सेट करने के लिए होने से बचाने के उन्हें स्वयं: https://quality.embarcadero.com/browse/RSP-13231

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