关于程序函数的调用的一点疑问
图中的栈帧结构应该是IA32的栈帧结构。IA32栈帧结构中,ebp是帧指针,也可以理解为栈的基址吧。(不过在X86-64结构中是没有帧指针的)而帧指针一般是在一个函数调用的帧栈结构中的顶端。具体的CSAPP第三章讲的挺清楚的,可以看看
■网友
ebp 是当前帧(函数调用)的基地址,所指向的old ebp是上一帧(函数调用)的基地址。在当前帧ret之前,要将esp恢复至当前ebp的位置,而将ebp的值恢复至old ebp的位置,这样做就将工作现场恢复到函数被调用前的状态了。
■网友
一般来说 栈是向低地址方向增加的 堆是向高地址方向增加函数调用先传参 然后保留函数返回地址windows下汇编大致为push ebp 保留原栈底地址mov ebp esp 将栈底移至该被调函数栈顶sub esp XXX 开辟XXX的栈空间push eax 保存需要的寄存器。。。。。。。。。 执行一系列的操作mov esp ebp 回收栈空间ret 返回(默认调用是调用方平衡栈)
推荐阅读
- 过节■江苏省委省政府办公厅下发关于做好2021年元旦春节期间有关工作的通知
- 招聘都要学历,何来程序员不看学历
- 银行系统的研发岗(程序员)是不是很难进(校招)推广到国企的研发岗(程序员)呢
- 坐标合肥,请问在哪里能捕捉到程序员这种生物他们大都出现在哪里呢
- 程序猿和产品汪能愉快的一起谈恋爱嘛
- 怎样成为一名合格的Python程序员?
- |徐州市出台《关于优化创新创业生态系统 提升区域科技创新活力的实施意见》及实施细则
- 雨下|全球关于禁售燃油车只是理论上可行吗
- 我是程序猿养了条狗,取啥名字好
- 送程序员男友苹果无线耳机还是专业品牌耳机
