blog/_posts/2015-02-14-magie-noire-avec...

23 lines
1.3 KiB
Markdown

---
title: "Magie noire avec les pointeurs - C"
date: 2015-02-14
url: magie-noire-avec-les-pointeurs-c
layout: post
category: Programming
---
[![A missing blog post image](/img/blog/magie-noire-avec-les-pointeurs-c.png)](/img/blog/magie-noire-avec-les-pointeurs-c.png)
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](https://gist.github.com/HorlogeSkynet/44f898140f0304b9cee8e4bd53440a00).
Merci @thearcanum pour la découverte et le suivi personnalisé :+1:
**:warning: Tailles considérées pour un système 64 bits :warning:**