Le but de ce morceau de code est de modifier la valeur d’une variable dans une autre fonction que celle où elle est déclarée, et sans aucun pointeur passé en argument.
Comment cela peut marcher ?
En récupérant l’adresse de cette variable, par l’intermédiaire de celle d’un élément créé dans cette fonction, à laquelle on ajoute une “certaine valeur”.
Cette “certaine valeur”, dépend du nombre et de la taille des éléments déclarés entre la fonction contenant la variable et la fonction magique()
.
Ici, un int
, un int*
, un long
, un long*
, et un void*
, ce qui revient à 36 octets, soit 0x24 en hexadécimal.
Les paramètres du main()
, soit argc
et argv
, sont codés tous deux sur 8 octets, donc 0x10 en hexadécimal.
Code complet disponible ici.
Merci @thearcanum pour la découverte et le suivi personnalisé
Tailles considérées pour un système 64 bits