क्या जीसीसी बफर ओवरफ्लो हमले को रोकने के लिए समझदारी से स्मृति आवंटन करता है?जीसीसी मेमोरी आवंटन समस्या - बफर ओवरफ्लो हमला
int function(char *str) {
int a = 0; // See the
char b[16] = "abcd"; // changes here
if(!strcmp(b, str))
a = 1;
return a;
}
और
int function(char *str) {
char b[16] = "abcd"; // See the
int a = 0; // changes here
if(!strcmp(b, str))
a = 1;
return a;
}
जब मैं gdb के साथ यह डिबग, यह हमेशा चर और फिर चरित्र सरणी पूर्णांक पहले स्मृति को आबंटित; कोई फर्क नहीं पड़ता कि परिवर्तनीय घोषणा का क्रम क्या है। यानी दोनों मामलों में, कंपाइलर पहले स्मृति को a
और फिर b
पर आवंटित करता है।
(higher address)
Memory
| |
| |
+--------+
| |
| |
| |
| |
+--------+ <----- b (16 bytes)
| |
+--------+ <----- a (4 bytes)
| |
(lower address)
तो, भले ही हम str
में 16 से अधिक चरित्र की आपूर्ति, यह a
का मूल्य को प्रभावित नहीं कर सकते हैं। क्या कोई मेरी मदद कर सकता है?
धन्यवाद।
_ मानक_ किसी भी उद्देश्य के लिए इस तरह की पुनरावृत्ति की अनुमति देता है, संकलक पूरा करना चाहता है। सबसे आम - अनुकूलन। यह अभी भी "खुफिया" है, लेकिन "बफर ओवरफ्लो आक्रमण" को रोकने के लिए नहीं। और यह अभी भी एक _undefined व्यवहार_ (बफर ओवरफ़्लो) –