Da notare prima di compilare il programma ho disabilitato ASLR tramite:
$ sudo -i
root@laptop:~# echo "0" > /proc/sys/kernel/randomize_va_space
root@laptop:~# exit
logout
Ho quindi compilato il programma tramite:
gcc -ggdb -mpreferred-stack-boundary=4 -o test vuln.c
(Inoltre non ho capito il parametro -mpreferred-stack-boundary=4 )
Ho un programma:
L'overflowinteoriadovrebbeverificarsiquandoilcompilatoreraggiungelarigadigets(buff);dovehotentatoditraboccarel'indirizzodiritorno($RIP).
Diseguitoèlosmontaggiodelmiometodoprincipale,getInput()esayHello()(alloscopodimostrarel'indirizzodelmetodosayHello,0x4005d,chesperodisovrascriverelostackRIPcon).

Quandoforniscouninputsuperiorea15xA,seggoilprogramma.Equandoforniscopiùdi24xA,comincioasovrascrivereil$RIP,cioè25xArestituisconoilvaloreRIP0x0000000000400041.Logicamente,hoprovatoafornireivaloriesadecimaliper"4005dc" (indirizzo say ()), ma non riesco a provarlo. Quando si utilizza un convertitore esadecimale online in un convertitore di testo, il valore di testo corrispondente ricevuto da "4005dc" è "@ Ü" .
Ancora di più capisco che quando il programma ha raggiunto l'istruzione retq in getInput() , farà apparire l'indirizzo di ritorno in cima allo stack e vi salterà sopra.
