Я написал простую функцию c:
void function(){
int n;
char s[6];
n = 1;
s[0] = 2;
s[5] = 3;
}
Это разбирается на:
pushl %ebp
movl %esp, %ebp
sub $40, %esp
movl $1, -12(%esp)
movb $2, -40(%esp)
movb $3, -35($esp)
leave
ret
Я пытаюсь понять, почему char [] дан адрес, который начинается с -40.
это 6-байтовый массив, поэтому я думаю, что для этого потребуется 8 байт (кратных 4-байтовому слову), и в этом случае он будет назначен адресу памяти -20 (% esp)
Почему -40 (% esp)?
Спасибо
РЕДАКТИРОВАТЬ: Я также предполагаю, что n дается смещение -12 (% esp), потому чтоint и регистры имеют длину 4 байта, а значение eip увеличивается до -4 (% esp), а значение ebp устанавливается до -8 (% esp).Это правильно?
Заранее спасибо !!