ret指令用栈中的数据,修改IP的内容,从而实现进转移;
retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移;
CPU执行ret指令时,进行下面两步操作:
(1) (IP)=((ss)*16+(sp))
(2) (sp)=(sp)+2
CPU执行retf指令时,进行下面4部操作:
(1) (IP)=((ss)16+(sp))
(2) (sp)=(sp)+2
(3) (CS)=((ss)16+(sp))
(4) (sp)=(sp)+2
可以看出,CPU执行ret指令时,相当于进行:
pop IP
CPU执行retf指令时,相当于进行:
pop IP
pop CS
例如:
1、
code
1 | assume cs:code |
ret指令执行后CS:IP指向代码的第一条指令
2、
code
1 | assume cs;code |
retf指令执行后,CS:IP指向代码段的第一条指令。