学习视频

3-7. 过程(函数调用)

笔记

执行到哪个函数要进去了,就把对应哪个句子的地址放进 rip

下一步调用 call 后,把 mulstore 的第一条的地址写进去,变成 rip 741

第二步,把函数结束后的下一句的返回地址,压入栈中

函数执行完毕,ret 将函数地址弹出,返回地址存在 rip 中

参数大于 6 以后,多的参数存在栈中,入栈的顺序好像有点不清晰,根据结果倒退的话,它是先读的参数
参数读完,a4p 放进去,然后放 a4,再执行这个函数的入口的地址,放到栈的最后

变量补全 8 字节存储

寄存器使用的先后顺序

以这个函数为例
一进来的第一句,先分配 16 个字节的空间

第二句,再 rsp 这里放第一个参数 534

然后+8 放第二个参数,栈底的地址更高,栈顶的地址低

最后栈顶+16 释放栈

寄存器是公用的,为了防止寄存器出现覆盖问题

调用者保存的概念
被调用者保存的概念

函数调用的时候
https://www.bilibili.com/video/BV1214y1k7M8?t=606.7
先是参数入栈,然后是返回地址入栈,然后是上一个函数的上一个栈帧,然后是函数内定义的变量