Bonsoir,

J'ai remarqué en executant le programme ci dessous que mon ordi allouait 2 fois la taille demandé pour une variable, si quelqu'un pouvait m'expliquer pourquoi..

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
20
21
#include <stdio.h>
#include <string.h>
 
int main(int argc, char *argv[]) {
   int value = 5;
   char buffer_one[8], buffer_two[8];
 
   strcpy(buffer_one, "one"); /* Put "one" into buffer_one. */
   strcpy(buffer_two, "two"); /* Put "two" into buffer_two. */
 
   printf("[BEFORE] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
   printf("[BEFORE] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
   printf("[BEFORE] value is at %p and is %d (0x%08x)\n", &value, value, value);
 
   printf("\n[STRCPY] copying %d bytes into buffer_two\n\n", (int)strlen(argv[1]));
   strcpy(buffer_two, argv[1]); /* Copy first argument into buffer_two. */
 
   printf("[AFTER] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
   printf("[AFTER] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
   printf("[AFTER] value is at %p and is %d (0x%08x)\n", &value, value, value);
}
Exemple d'execution:

$ ./overflow_exemple 1234567890
[BEFORE] buffer_two is at 0x7fff62e3d7c0 and contains 'two'
[BEFORE] buffer_one is at 0x7fff62e3d7d0 and contains 'one'
[BEFORE] value is at 0x7fff62e3d7bc and is 5 (0x00000005)

[STRCPY] copying 10 bytes into buffer_two

[AFTER] buffer_two is at 0x7fff62e3d7c0 and contains '1234567890'
[AFTER] buffer_one is at 0x7fff62e3d7d0 and contains 'one'
[AFTER] value is at 0x7fff62e3d7bc and is 5 (0x00000005)
Les 16 premiers caractères sont insérés dans buffer_two alors que je ne lui ai alloué que 8 cases, la suite va dans buffer_one.
Si quelqu'un peut m'eclaircir..