23 lines
1.3 KiB
Markdown
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:**
|