Compiling a simple C code into assembly using GCC will have the following output:
...
 13         xorl    %eax, %eax
 14         movl    $0, -4(%rbp)
 15         movl    $5, -8(%rbp)
 16         movl    $6, -12(%rbp)
 17         movl    -8(%rbp), %ecx
 18         addl    -12(%rbp), %ecx
 19         movl    %ecx, -16(%rbp)
 20         popq    %rbp
 21         retq
My question is, why an offset to the frame base pointer (rbp) is being used instead of manipulating the stack pointer (rsp). Isn't that the whole point of having a stack pointer?
What if the stack of this process gets overwritten by some other process (Garbage collection as an example) which doesn't even know the stack is being used, since rsp isn't decremented when writing values.
 
    