यह प्रश्न C99 में परिवर्तनीय लंबाई सरणी के बारे में this one से अलग है।डेस्कटॉप ओएस पर सी कंपाइलर्स कितने मेमोरी पेज स्टैक ओवरफ़्लो का पता लगाने के लिए उपयोग करते हैं?
जवाब का कहना है ढेर में चर लंबाई सरणियों (या एक निश्चित आकार के बड़े सरणियों) के आवंटन के साथ एक खतरा यह है कि आवंटन चुपचाप, कहते हैं करने के लिए विरोध के रूप में, विफल हो सकता है यह है कि malloc
बुला, जो स्पष्ट रूप से बताता है कॉलर क्या आवंटन सफल हुआ।
आधुनिक गैर-एम्बेडेड संकलन प्लेटफॉर्म किसी भी अतिरिक्त लागत पर कुछ स्टैक ओवरफ़्लो का पता लगाने के लिए एक अवैध मेमोरी ज़ोन का उपयोग करते हैं (चेक केवल एमएमयू द्वारा पहले से किए गए चेक हैं)। यह उपर्युक्त समस्या से 100% पर सुरक्षित नहीं है क्योंकि एक बहुत बड़ी स्थानीय सरणी अमान्य क्षेत्र पर स्टैक पॉइंटर को कूदने का कारण बन सकती है।
क्या कोई यह जानता है कि इस पहचान के लिए आमतौर पर कितने पेज आवंटित किए जाते हैं? मुझे लगता है कि यह कम से कम 4KiB होगा, लेकिन यह और भी हो सकता है। क्या यह संकलक या ओएस द्वारा बनाई गई पसंद है, और किसी भी मामले में, इसे बदलने का कोई तरीका है?
अच्छा सवाल है, लेकिन किसी को यह टिप्पणी करनी चाहिए कि मॉलोक सभी प्रणालियों पर बताने की व्याख्या नहीं करता है कि आवंटन उत्तराधिकारी है या नहीं। यह बाद में पहले पहुंच पर असफल हो सकता है (कम से कम कुछ सिस्टम पर - आशावादी आवंटन या स्मृति ओवरकमिटमेंट देखें)। – flolo
@flolo मैंने लगभग इसके बारे में टिप्पणी की, लेकिन फिर मैंने इसे छोड़ने का फैसला किया क्योंकि स्मृति ओवरकमिट वास्तव में एक ओएस मुद्दा है, न कि एक भाषा। चूंकि यह अनिर्धारित व्यवहार का कारण नहीं बनता है, यह आवंटन प्रक्रिया, या किसी अन्य प्रक्रिया को स्पष्ट रूप से मारने का कारण बनता है। –
ओएसएस-सुरक्षा मेलिंग सूची पर [क्वालिज़ सिक्योरिटी एडवाइजरी - द स्टैक क्लैश] (http://www.openwall.com/lists/oss-security/2017/06/19/1) भी देखें। यह कुछ साफ चाल, और गार्ड पेज की इसकी सुंदर हानि से पता चलता है। यह आश्चर्यजनक है कि वे इसके साथ कितने ओएस ले गए। – jww