Così ho questo codice C:argomento printf Mysterious durante lo smontaggio programma c
#include <stdio.h>
int main(void)
{
int a;
int b;
int c;
a=b=c=5;
printf("Hi%d%d%dHi",a,b,c);
}
ho compilato su Ubuntu con:
gcc program.c -o program -ggdb -m32 -O2
E poi smontato con:
objdump -M intel program -d
E in main printf() viene chiamato in questo modo:
mov DWORD PTR [esp+0x10],0x5
mov DWORD PTR [esp+0xc],0x5
mov DWORD PTR [esp+0x8],0x5
mov DWORD PTR [esp+0x4],0x8048500
mov DWORD PTR [esp],0x1
call 8048330 <[email protected]>
Quello che mi chiedo in questo momento è ciò che questo significa:
mov DWORD PTR [esp],0x1
so che cosa le prime 4 istruzioni MOV sono per, ma non riesco proprio a capire perché un '1' viene spinto su lo stack. Anche questo movimento si verifica solo quando l'ottimizzazione è attiva. Qualche idea?