cassemblyx86gdb

C allocated space size on stack for an array


I have a simple program called demo.c which allocates space for a char array with the length of 8 on the stack

#include<stdio.h>


main()
{
        char buffer[8];

        return 0;
}

I thought that 8 bytes will be allocated from stack for the eight chars but if I check this in gdb there are 10 bytes subtracted from the stack.

I compile the the program with this command on my Ubuntu 32 bit machine:

$ gcc -ggdb -o demo demo.c

Then I analyze the program with:

$ gdb demo

$ disassemble main

(gdb) disassemble main
Dump of assembler code for function main:
   0x08048404 <+0>: push   %ebp
   0x08048405 <+1>: mov    %esp,%ebp
   0x08048407 <+3>: and    $0xfffffff0,%esp
   0x0804840a <+6>: sub    $0x10,%esp
   0x0804840d <+9>: mov    %gs:0x14,%eax
   0x08048413 <+15>:    mov    %eax,0xc(%esp)
   0x08048417 <+19>:    xor    %eax,%eax
   0x08048419 <+21>:    mov    $0x0,%eax
   0x0804841e <+26>:    mov    0xc(%esp),%edx
   0x08048422 <+30>:    xor    %gs:0x14,%edx
   0x08048429 <+37>:    je     0x8048430 <main+44>
   0x0804842b <+39>:    call   0x8048340 <__stack_chk_fail@plt>
   0x08048430 <+44>:    leave  
   0x08048431 <+45>:    ret    
End of assembler dump.

0x0804840a <+6>: sub $0x10,%esp says, that there are 10 bytes allocated from the stack right?

Why are there 10 bytes allocated and not 8?


Solution

  • No, 0x10 means it's hexadecimal, i.e. 1016, which is 1610 bytes in decimal.

    Probably due to alignment requirements for the stack.