Bonjour,
J'aurais besoin d'un petit coup de main pour comprendre la décompilation d'un programme en C. (Inel x86)
Le programme C :
donc je compile : gcc test.c -o test
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void f(int a , int b, int c){ char z[4]; } void main(){ f(1,2,3); }
Je désassemble avec gdb ("disas main"):
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 0x0804832c <main+0>: lea 0x4(%esp),%ecx 0x08048330 <main+4>: and $0xfffffff0,%esp 0x08048333 <main+7>: pushl -0x4(%ecx) 0x08048336 <main+10>: push %ebp 0x08048337 <main+11>: mov %esp,%ebp 0x08048339 <main+13>: push %ecx 0x0804833a <main+14>: sub $0xc,%esp 0x0804833d <main+17>: movl $0x3,0x8(%esp) 0x08048345 <main+25>: movl $0x2,0x4(%esp) 0x0804834d <main+33>: movl $0x1,(%esp) 0x08048354 <main+40>: call 0x8048324 <f> 0x08048359 <main+45>: add $0xc,%esp 0x0804835c <main+48>: pop %ecx 0x0804835d <main+49>: pop %ebp 0x0804835e <main+50>: lea -0x4(%ecx),%esp 0x08048361 <main+53>: ret
Par exemple "add $0xfffffff0,%esp", le $0xfffffff0 est un entier signé ou non signé??
Je ne comprend pas ce que le programme fait entre <main+0> et <main+7>.
Si qqn sait
merci
Partager