linux call 汇编,汇编 ret,retf和call

ret指令用栈中的数据,修改IP,实现近转移

1,(IP)=((SS)*16+(SP))

2,(SP)=(SP)+2

相当于 pop IP

retf指令用栈中的数据修改CS和IP,实现远转移

1,(IP)=((SS)*16+(SP))

2,(SP)=(SP)+2

3,(CS)=((SS)*16+(SP))

4,(SP)=(SP)+2

相当于pop IP,pop CS

call指令分两步操作

1,将当前的IP或IP,CS压入栈中

2,转移

call不能实现短转移,除此之外,call指令实现转移的方法和jmp指令的原理相同

call 标号相当于

push IP

jmp near ptr 标号

call far ptr 标号 实现段间转移,相当于

push CS

push IP

jmp far ptr 标号

call 16位reg,转移地址在寄存器中

push IP

jmp 16位reg

call word ptr 内存单元地址

push IP

jmp word ptr 内存单元地址

call dword ptr 内存单元地址

push CS

push IP

jmp dword ptr 内存单元地址

使用ret和call,模块坏编程

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

MOV AX,DATAS

MOV DS,AX

call fun1

MOV AH,4CH

INT 21H

fun1:

...

call fun2

...

ret

fun2:

...

ret

CODES ENDS

END START

用跳转指令执行数据区的机器指令

DATAS SEGMENT

; 这是mov ax,1234h的机器指令

w db 0B8h,34h,12h

DATAS ENDS

STACKS SEGMENT

STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

MOV AX,DATAS

MOV DS,AX

push ax

mov ax,0

push ax

retf

MOV AH,4CH

INT 21H

CODES ENDS

END START

49caba723102f9ed5acb5c0318afa2b4.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值