该函数的开头的push rbp; mov rbp, rsp; sub rsp, 0x40,先保存rbp的数值,再令rbp等于rsp,然后将栈顶指针rsp减小0x40(也就是64),相当于在栈上分配长度为64的空间,main函数中只有name一个局部变量,显然这段空间就是name数组,即name的起始地址为rbp-0x40。再结合函数结尾的leave; ret,同时类比一下32位汇编...
栈溢出一般和操作指针有关系(包括本质上是指针的各种形式),比如调用不定变量个数的函数时(像printf、scanf这种),没有按约定传入适当的参数个数;函数操作传入的数组下标越界等;得到指向局部变量的指针后,做不合适的偏移操作。以上这些都有可能造成栈溢出。