SLP(Chapter 5):函数的调用返回

本文详细介绍了函数调用返回的过程,包括PUSH & POP操作、CALL & RET指令、激活记录(栈帧)的概念及工作原理。讨论了作用域、参数传递、局部变量的存储,以及不同的函数调用约定,如_cdecl和stdcall。
摘要由CSDN通过智能技术生成

复习

  1. PUSH & POP
    SP 指向当前栈顶最后压入的一个字节
    例子:

    1. PUSH EAX (32bits)
      假设压栈前SP = 0x0012ff40,则PUSH执行后,
      0x0012ff3c~3f将用于存放EAX的值,
      SP=SP-4,即SP修改为 0x0012ff3c
    2. POP AX (16bits)
      假设压栈前SP = 0x0012ff40,则POP执行后,
      0x0012ff40~41的值拷贝入AX
      SP=SP+2,即SP修改为 0x0012ff42
      Tips: SP的修改意味着以前数据理论上不能访问了,但是该字节的内容并没有被擦除。
  2. CALL & RET
    例子:

    1. CALL (导致ESP 修改-4/-8)
      PUSH IP( a near or short call) / PUSH CS PUSH IP (far call)
      JMP 跳转至被调用函数
    2. RET (导致ESP 修改+4,近调用)
      POP IP
    3. RETF(导致ESP 修改+8,对应far call)
      POP IP POP CS
      注:近转移 near/short call是同一代码段内转移,只需要变IP
      远转移 far call是不同代码段间(调用另一个文件的代码段)转移,除了IP,还要改变CS
      page
    </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值