se eseguiamo il seguente codice usando l'input "hi", l'output sarà semplicemente "hi"
main(int argc, char **argv)
{
char *secret = "This is a secret 1\n";
char *secret2 = "This is secret 2\n";
printf(argv[1]);
}
tuttavia, se eseguiamo il programma con l'input "% s", l'output sarà "This is a secret 1"
da quello che ho capito, la ragione di ciò è che quando printf viene alimentato con la stringa di formattazione% s, non controlla se i dati di una stringa sono stati inseriti nello stack, quindi se non c'è una stringa fornita, recupererà i prossimi dati memorizzati nello stack che in questo caso è la nostra stringa segreta. Quindi per ogni% s recupererà i dati successivi sul suo stack frame e lo visualizzerà in formato stringa.
La mia domanda è, tenendo presente che (main) e (printf) hanno ciascuno il proprio stack frame, in che modo% s può far sì che printf visualizzi dati che non appartengono al suo stack frame? principale)