|
$cat test.c
int main(int argc, char** argv)
{
int a = 1;
int b = 2;
int c = 3;
return 0;
}
$cc -S test.c
$cat test.s
.file "test.c"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
andl $-16, %esp
movl $0, %eax
subl %eax, %esp
movl $1, -4(%ebp)
movl $2, -8(%ebp)
movl $3, -12(%ebp)
movl $0, %eax
leave
ret
.size main, .-main
.section .note.GNU-stack,"",@progbits
;--------------------------------------------------
在main: 里subl $24, %esp
这里的%esp为什么要减去24 ? 我的理解是%esp里面的栈地址的下面应该是局部变量
的存储位置, 那么我上面的3个int32的变量只有12个bytes, 就算要对齐, 为什么是24?
而且我的main程序里没有牵扯到临时变量和函数调用, 所以也没有理由这里用24啊?
%esp的对齐有什么特别的要求吗? |
|