Chapter.九 C函数调用栈,栈溢出,Pwn入门(2 / 4)
东方阅读网【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生活》最新章节。
本章未完,点击下一页继续阅读。