das folgende Programm verwenden, ich versuche, einen Pufferüberlauf zu erreichen:Programm wird nicht erwartet, dass PC-Registry-Adresse für Pufferüberlauf Rückkehr
#include <stdio.h>
#include <string.h>
void vuln(){
char buff[16];
scanf("%s",buff);
printf("You entered: %s\n",buff);
}
void secret(){
printf("You shouldn't be here.");
}
int main(){
vuln();
return 0;
}
Wenn AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMM
als Eingang der Eingabe das Crash-Protokoll meldet, dass R15 (PC) Register enthält den Wert 0x46464644
Meine Frage ist warum ist nicht die Adresse 0x46464646
? Wie geht es mit drei Fs, gefolgt von einem D? Das erwartete Ergebnis sollte 0x46464646
sein, da die Daten überschrieben werden sollten.
Sie außerhalb der Grenzen gehen und [* undefiniert Verhalten *] (https://en.wikipedia.org/wiki/Undefined_behavior). Das bedeutet, dass wirklich alles passieren kann, einschließlich der Erzeugung von [nasalen Dämonen] (http://catb.org/jargon/html/N/nasal-demons.html) oder des Verhaltens, das du siehst. –
Doch die Probleme mit Cyber-Sicherheit nutzen die Tatsache, dass, was auch immer passiert, wiederholt auftritt. Ich empfehle diesen empirischen Ansatz, um Themen der Cybersicherheit zu verstehen. – lockcmpxchg8b