码迷,mamicode.com
首页 > 其他好文 > 详细

esp寻址ebp寻址

时间:2020-02-21 20:34:56      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:使用   调用函数   大小   保存   入栈   函数   代码   十六进制   构建   

栈顶指针esp  栈底指针ebp

esp寻址

构建函数

  1.使用寄存器传递参数

  2.使用堆栈来传递参数

    push 1

    push 2

    push 3

    把要用的参数压入堆栈后,需要用call调用函数来计算参数,调用call时,会将call的下一行指令的地址压入栈中,所以使用参数时地址为[esp+4,8,12]

    使用函数的代码为 mov eax,ptr ss:[esp+4]

             add eax,ptr ss:[esp+8]

             add eax,ptr ss:[esp+12]

             retn 12   //保持堆栈平衡

  在函数中,需要使用寄存器时,最好将原来寄存器的值保存在堆栈中,使用完后,倒序pop回来

ebp寻址

  在一个函数中重新分配栈空间给这个函数使用,使用完恢复为原来的栈  

 

  push 1

  push 2

  call 函数

……

  push ebp

  mov ebp,esp

  mov esp,10   //10为十六进制,决定于实际需要的栈的大小

  mov eax,ptr ss:[ebp+8]

  add eax,ptr ss:[ebp+C]

  mov esp,ebp

  pop ebp

  ret

esp寻址ebp寻址

标签:使用   调用函数   大小   保存   入栈   函数   代码   十六进制   构建   

原文地址:https://www.cnblogs.com/uestc2017zh/p/12342556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!