汇编的Enter, leave, return 指令

来源:互联网 发布:无间道3知乎 编辑:程序博客网 时间:2024/06/05 03:19

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             中断程序返回
  

原创粉丝点击