菜鸟求助,各种地方都找不到答案。
本帖最后由 maxwellxxx 于 2013-01-30 19:18:45 编辑 是这样的,有这么一段c
#include <stdio.h>
void function(int a,int b,int c)
{
char buffer1[5];
char buffer2[10];
}
void main()
{
function(1,2,3);
}
先不管这段程序的意义,我用gcc对它进行了编译到汇编,优化设置是默认的。代码如下:
.file"ex1.c"
.text
.globlfunction
.typefunction, @function
function:
.LFB0:
.cfi_startproc
pushl%ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl%esp, %ebp
.cfi_def_cfa_register 5
subl$24, %esp
movl%gs:20, %eax
movl%eax, -12(%ebp)
xorl%eax, %eax
movl-12(%ebp), %eax
xorl%gs:20, %eax
je.L2
call__stack_chk_fail
.L2:
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE0:
.sizefunction, .-function
.globlmain
.typemain, @function
main:
.LFB1:
.cfi_startproc
pushl%ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl%esp, %ebp
.cfi_def_cfa_register 5
andl$-16, %esp
subl$16, %esp
movl$3, 8(%esp)
movl$2, 4(%esp)
movl$1, (%esp)
callfunction
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE1:
.sizemain, .-main
.ident"GCC: (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2"
.section.note.GNU-stack,"",@progbits
我的问题是为什么汇编红色出esp是减24(即function函数中,subl$24, %esp这句)理论上不是应该减20么????请大家帮帮忙,我搞了两天都没有弄清楚。 gcc 汇编 求助
[解决办法]
看下边的
call __stack_chk_fail
编译器自己加了点东西检查stack
[解决办法]
-fstack-check Insert stack checking code into the program