Bonjour à tous,
j'ai des petits soucis concernant un programme. J'ai une fonction en C qui ressemble à peu près à ça:
En toute logique, buffer devrait être à la base de la pile (car déclaré en premier) et on aurrait le shéma suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 static Image *ReadXBMImage(const ImageInfo *image_info,ExceptionInfo *exception) { char buffer[MaxTextExtent], //avec #define MaxTextExtent 4096 name[MaxTextExtent]; Image *image; long y; register long i, x; //plein d'autres déclarations de variables assert(image_info != (const ImageInfo *) NULL); assert(image_info->signature == MagickSignature); //plein dautre code, pas vraiment necessaire à la compréhension du shmilblick
[name: 4086 bytes][buffer: 4086 bytes][EBP][EIP]
Le problème est qu'en faisant un disass sur le code compilé, j'ai un:
Si on sais utiliser une calculatrice, on se rend bien compte que 4086 = 0X1000.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 mov eax, ebp-1014h ;avec eax qui est l'adresse de notre buffer
On a alors le shéma de pile suivant:
[buffer: 4096 octets][zone inconnue: 20 octets]
J'aurrais donc voulu savoir pourquoi mon buffer n'est pas à la bonne place. Est-ce que c'est le compilo (gcc) qui fait des siennes et gère les variables comm il le veut? est-ce qu'il réserve cet espace pour y stocker des données utilisées pour l'exécution ou autre (comem assert)?
Je susi un peu perdu, si quelqu'un pouvait m'aider là dessus, je lui en serait bien reconnaissant
Partager