नीचे दिए गए कोड का आउटपुट "ओवरफ़्लो" है, लेकिन मैंने स्पष्ट रूप से func
फ़ंक्शन को कॉल नहीं किया था। यह कैसे काम करता है?इस कोड को समझाओ जो इसे स्पष्ट रूप से कॉल किए बिना फ़ंक्शन चलाता है?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int copy(char *input)
{
char var[20];
strcpy(var, input);
return 0;
}
int func(void)
{
printf("Overflow\n");
return 0;
}
int main(int argc, char *argv[])
{
char str[] = "AAAABBBBCCCCDDDDEEEEFFFFGGGG";
int *p = (int *)&str[24];
*p = (int)func;
copy(str);
return 0;
}
आपका मतलब बफर ओवरफ़्लो है ...? – JosephH
यह ठीक है कि एक हैकर कोड को निष्पादित करने के लिए एक असुरक्षित प्रोग्राम कैसे प्राप्त कर सकता है जिसका अर्थ यह नहीं था। इसे समझने के लिए कंपाइलर, रनटाइम पर्यावरण, और सीपीयू आर्किटेक्चर के निम्न स्तर के ज्ञान की आवश्यकता होती है। – Jon
यह ध्यान दें: यदि func के पते में शून्य बाइट है, तो यह काम नहीं करेगा जैसा आप उम्मीद करते हैं। – aaronps