push指令

push指令的原理

  1. 堆栈指针的调整

    • 在x86架构中,堆栈向低地址方向增长。

    • 执行push指令时,首先将堆栈指针ESP(或在x86_64架构中为RSP)减小,以为新的数据腾出空间。对于32位系统,堆栈指针减小4个字节;对于64位系统,堆栈指针减小8个字节

  2. 数据写入堆栈

    • 将要压入堆栈的数据写入新的堆栈指针位置。

pop指令

pop指令的原理

  1. 数据从堆栈弹出

    • 从当前堆栈指针位置读取数据。
  2. 堆栈指针的调整

    • 在x86架构中,堆栈向低地址方向增长。

    • 执行pop指令时,将堆栈指针ESP(或在x86_64架构中为RSP)增加,以释放之前存储的数据空间。对于32位系统,堆栈指针增加4个字节;对于64位系统,堆栈指针增加8个字节

call指令

call原理

保存返回地址

  • call指令会将下一条指令的地址(即返回地址)压入堆栈。

跳转到子程序

  • call指令会将程序计数器(PC,x86架构中为EIPRIP)设置为子程序的地址,从而跳转到子程序执行。

ret指令

ret 指令用于从函数返回。它的主要作用是:

  • 从栈中弹出返回地址。

  • 跳转到返回地址继续执行。