函数调用栈图解 计算机二级C语言。为什么栈,支持,子程序,调用?
浏览量:2844
时间:2021-03-11 01:27:36
作者:admin
堆栈是一个进退线性表。只能从一端插入和删除。当主程序调用子函数时,它保存主函数的当前状态,然后转移到子函数的执行,最后将子函数的结果返回到主函数中子函数的位置,并继续执行,这被称为堆栈支持的子例程。
计算机二级C语言。为什么栈,支持,子程序,调用?
传统方法不行。调用函数是一个堆栈压缩过程。当子函数返回时,堆栈将弹出。堆栈溢出是可以的,这就是我们常说的“缓冲区溢出攻击”,可以调用任意代码(这是C的强项)。
子程序调用子程序后可不可以直接返回主程序?
在各种通用平台中,子程序的调用过程是相似的。读取和解码子程序调用指令后,首先保存当前程序的断点地址。不同的硬件平台有不同的保存方式,有的按栈保存,有的保存到特定的寄存器中;然后将子程序的入口地址设置为当前程序地址,然后读取并执行子程序。子程序结束后,通过指令返回调用点,返回值通过寄存器或堆栈给出。CPU将取出先前保存的断点地址并将其设置为当前程序指针,然后继续执行主程序。因此,为了保证调用后的执行环境与调用前相同,通常需要在子程序开始时保存相关寄存器环境,并在子程序结束前恢复这些寄存器。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。