为什么gcc会为char缓冲区分配更多空间

时间:2014-06-20 08:40:00

标签: gcc buffer-overflow

我对最新版本的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堆栈保护的东西。

0 个答案:

没有答案