Perché questa funzione alloca più spazio di stack del necessario, prima di chiamare gets()
?Stackspace allocata inutile?
echo:
pushl %ebp
movl %esp, %ebp
pushl %ebx
leal -8(%ebp), %ebx
subl $20, %esp <-- Why so much space?
movl %ebx, (%esp)
call gets
...
Il codice C corrispondente:
void echo()
{
char buf[4];
gets(buf);
puts(buf);
}
Perché c'è uno spazio aggiuntivo supplementare di tre parole tra il buffer e l'argomento per ottiene?
stack http://s8.postimage.org/h2niz1kut/stack.png
Allineamento. Allineamento ovunque! –
@ H2CO3 Qual è la convenzione di allineamento per i frame di stack, assumendo gcc su linux? – phant0m
@ phant0m Dipende dal processore specifico. i386 potrebbe essere 8 byte (non sicuro) mentre AVX2 potrebbe essere 32 (di nuovo non sicuro). Le librerie statiche collegate a un binario devono essere abbinate. – Potatoswatter