|
void function(int a, int b, int c) {
char buffer1[5];
int *ret;
ret = buffer1 + 28;
(*ret) += 7;
}
下面是gcc -S 出来的
_function:
pushl%ebp
movl%esp, %ebp
subl$40, %esp
leal-24(%ebp), %eax
addl$28, %eax
movl%eax, -28(%ebp)
movl-28(%ebp), %edx
movl-28(%ebp), %eax
movl(%eax), %eax
addl$7, %eax
movl%eax, (%edx)
leave
ret
为什么gcc为这个function的local variable留了40 bytes这么多?
buffer1的地址是 -24(%ebp) ?,为了alignment也应该只占8个byte,-16(%ebp) 到 (%ebp)这段用来做什么的呢 |
|