Die Ausgabe des folgenden Codes ist "Überlauf", aber ich habe die Funktion func
nicht explizit aufgerufen. Wie funktioniert es?Erklären Sie diesen Code, der eine Funktion ausführt, ohne sie explizit aufzurufen?
#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;
}
Sie meinen Pufferüberlauf ...? – JosephH
Das ist genau, wie ein Hacker ein ungesichertes Programm bekommen kann, um Code auszuführen, den es nicht gemeint hat. Zum Verständnis sind Compiler, Laufzeitumgebung und CPU-Architektur erforderlich. – Jon
Hinweis: Wenn die Adresse von func ein Null-Byte enthält, wird dies nicht so funktionieren, wie Sie es erwarten. – aaronps