辣个 ”拆炸弹“ 的实验 要 来 力 ,提前准备一下,到时候要做汇编,提前搞懂那些寄存器啊,指令的意义,以及x86-64指令的栈帧结构,否则无头苍蝇,是找不出boom函数调用的点的
寄存器
- %rsp 栈顶位置指针
- %rax 函数的返回值
- %rdi,%rsi,%rdx,%rcx,%r8,%r9 函数形参,对应第 1,2,3,4,5,6 个形参
- %rbx, %rbp, %r12, %r13, %r14, %r15
数据寄存器,即过程调用时,可以存放数据的临时寄存器,这些寄存器是被调用者保存的 - %r10, %r11 数据寄存器,调用者保存的
被调用者保存
因为子函数调用时,必须用寄存器完成计算啊,而父函数调用子函数时,可能寄存器里面已经有值了,那么需要子函数来帮忙保存这些值(压入栈中保存)
调用者保存
类似的,因为父子都要用寄存器,所以要备份,值得注意的是,这【调用者保存】的备份,是父函数自己想办法做的
图来自《深入理解计算机系统》第三版