函数过程调用

发布时间 2023-04-23 18:35:01作者: 次林梦叶

这一章中先以如下代码来讨论一下函数调用的大致过程:

 

 

  解释:

  首先明确一点:

    在函数执行的过程中,变量,参数,地址等都是放到栈中:

    

    而且需要注意的是:

    栈的栈底是在高地址,每一次入栈,栈指针寄存器ESP都会 -=

 

  Call指令 会将Call指令的下一条指令的地址入栈,这条保存的数据被称为返回地址

  Ret指令 会将目前ESP所指向的地址,其保存的数据放回到EIP(程序计数器)中

   然后EIP在不断地取指,执行

   注意每一次执行Ret时,都保证ESP目前指向的是当时入栈的返回地址(如果不是的话当然会出错了)

     这样保证了当函数调用返回时,可以延续上一个函数中继续执行

 

  返回值 (即函数return 后面跟着的变量)都是保存到EAX中的