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