汇编的Enter, leave, return 指令

转载 2012年03月21日 13:08:02

enter的用法:

enter   8, 3                   ;就是申请8个存储单元(在堆栈中),特权为3

http://www.cnblogs.com/keepfocus/archive/2011/09/15/2176925.html
1. enter等价于:
push ebp
mov ebp,  esp
在函数的入口时常用。

ENTER   n   申请局部变量,相当于
push    bp
mov     bp,   sp
sub     sp,   n

2. leave等价于:
mov esp,  ebp
pop ebp

 leave   与   ENTER   配对使用

 

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

一段常见的代码格式如下:

.text:00401450 push    ebp
.text:00401451 mov     ebp, esp
.text:00401453 sub     esp, 18h
....
.text:0040146E call    sub_401B10
.text:00401473 mov     eax, 1
.text:00401478 mov    esp,   ebp
                         pop    ebp
                         xor    eax,  eax
.text:00401479 retn    0Ch
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

用enter和leave替代了以后,就可以变成这个样子。
.text:00401450 enter
.text:00401453 sub     esp, 18h
...
.text:0040146E call    sub_401B10
.text:00401473 mov     eax, 1
.text:00401478 leave
                         xor eax, eax
.text:00401479 retn    0Ch

 

 

return   语句有以下几种
        ret               默认为NEAR,在PROC中由PROC属性决定
        retn             强制NEAR
        retf             强制FAR
        ret     n         默认为NEAR,在PROC中由PROC属性决定,同时SP   +=   n
        retn   n         强制NEAR,同时SP   +=   n
        retf   n         强制   FAR,同时SP   +=   n
        iret             中断程序返回
  

相关文章推荐

AT&T汇编enter、leave、call、ret指令

enter指令 在AT&T汇编中,enter等效于以下汇编指令: pushl %ebp        # 将%ebp压栈 movl %esp %ebp    # 将%esp保存到%e...

汇编中Enter和Leave指令

Enter的作用相当==push ebp和mov ebp,esp这后面两句大家很熟悉吧?函数开始一般都是这两句Leave的作用相当==mov esp,ebp和pop ebp而这后面这两句也很常见,函数...

汇编中Enter和Leave指令

汇编中Enter和Leave指令2009-01-28 下午 03:47Enter的作用相当==push ebp和mov ebp,esp 这后面两句大家很熟悉吧?函数开始一般都是这两句 Leave的作用...

return命令--后面的程序不执行

C或C++语言中有一个return命令,该命令很容易忽略1项功能,即return为函数结束符,如果函数中运行到return命令后,除了返回值,该函数也将运行结束,后面如果有程序也将不再运行,不过也不用...

C语言 子函数return局部变量和栈地址 机制

0引 C/C++中,函数内部的一切变量(函数内部局部变量,形参 )都是在其被调用时才被分配内存单元。子函数运行结束时,所有局部变量的内存单元会被系统释放。形参和函数内部的局部变量的生命期和作用域都是...

AT&T汇编指令enter、leave、call、ret

AT&T汇编enter指令和leave指令enter指令在AT&T汇编中,enter等效于以下汇编指令:pushl %ebp # 将%ebp压栈 movl %esp %ebp # ...

Push, Pop, call, leave 和 Ret 指令图解

帧栈结构图:最近在研究如何在程序crash定位出错函数,补充的计算机系统基础知识。此篇主要是介绍IA32中帧栈结构(frame stack)....

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

汇编指令push,mov,call,pop,leave,ret建立与释放栈的过程

感觉这东西有点烧脑,花了一下午时间终于整个捋顺了整个流程。 想理解好此过程,理解每个指令的作用,必须结合指令行地址,栈地址和寄存器一起来分析,否则很容易被绕晕。 大图图片说明:内存地址,汇编指令都...

ENTER指令和LEAVE指令小结

通常在函数调用中使用堆栈来传递参数,保存函数返回地址和为自动变量分配内存。通常在进入函数中时有两条命令,如下:push ebp  ; 保存上一个函数的栈帧基地址mov ebp,esp ; 设置新的函数...
  • arccotx
  • arccotx
  • 2011年01月06日 10:06
  • 1206
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汇编的Enter, leave, return 指令
举报原因:
原因补充:

(最多只允许输入30个字)