我对最新版本的gcc感到困惑。编译了一段简单的代码:
int main()
{
char buffer[1];
scanf("%s",buffer);
printf("You Entered %s\n", buffer );
return 0;
}
当我解开这个功能时,我就会发现:
(gdb) disas main
Dump of assembler code for function main:
0x0804846d <+0>: push %ebp
0x0804846e <+1>: mov %esp,%ebp
0x08048470 <+3>: and $0xfffffff0,%esp
0x08048473 <+6>: sub $0x20,%esp
0x08048476 <+9>: lea 0x1f(%esp),%eax
0x0804847a <+13>: mov %eax,0x4(%esp)
...........................
我的问题是,当我只分配1个字节时,为什么我们减去0x20,即32个字节!我不明白这种奇怪的行为
P.S。我正在研究缓冲区溢出,但这个问题似乎与它无关,仍然是我已经关闭了ASLR和其他gcc堆栈保护的东西。