东方阅读网【www.dfmsc.com】第一时间更新《从零开始的CTFer生活》最新章节。

|一些其他变量|

|_iple_vl|

|一些其他变量|

|一些其他数据|←rbp

------

接下来会将 rp 的值给到 rbp,即此时这两个寄存器指向同一个位置:

------

|原来的 rbp 的值|←rp←rbp

|下一条指令的返回地址|

|一些其他变量|

|_iple_vl|

|一些其他变量|

|一些其他数据|

------

最后 rp 再向低地址进行增长,为 f 函数中的临时变量开辟空间:

------

|一些其他变量|←rp

|ter_iple_vl|

|一些其他变量|

|原来的 rbp 的值|←rbp

|下一条指令的返回地址|

|一些其他变量|

|_iple_vl|

|一些其他变量|

|一些其他数据|

|一些其他数据|

------

此时 rp 与 rbp 之间的这一块区域便是 f 函数的「栈帧」。

而当 f 函数运行结束时, rbp 的值又会被重新给到 rp,此时程序为 f 函数临时开辟的栈帧便被“回收”了:

------

|原来的 rbp 的值|←rp←rbp

|下一条指令的返回地址|

|一些其他变量|

|_iple_vl|

|一些其他变量|

|一些其他数据|

|一些其他数据|

------

之后程序会从栈上弹出之前储存的原先的 rbp 的值,给到 rbp 寄存器,此时 rbp 便重新指回 _iple_f()的栈底:

------

|下一条指令的返回地址|←rp

|一些其他变量|

|_iple_vl|

|一些其他变量|

|更古老的 rbp 的值|←rbp

------

最后再将之前存放在栈上的调用 f()的下一条指令的返回地址从栈上弹出,给到「指令指针寄存器 rip」,程序便能恢复_iple_f()的继续执行,此时的栈帧重新变回了 _iple_f()的栈帧:

------

|一些其他变量|←rp

|_iple_vl|

东方阅读网【www.dfmsc.com】第一时间更新《从零开始的CTFer生活》最新章节。

本章未完,点击下一页继续阅读。

相关阅读More+

混沌天帝诀楚剑秋柳天瑶

随风漫步

逆袭1988

拾寒阶

超级修真弃少

木木鱼猫

我能看见物价表

十门吹牛

火爆全才仙医

一叶风流

陈东王楠楠

唐九