汇编Dayday04 堆栈

1.堆栈:就是一段内存,操作系统在程序启动的时候已经分配好的,供程序执行时使用。

2.查看堆栈:

dd (FS所对应的地址) 堆栈在使用时 从地址高位往地址低位使用

ESP:栈指针寄存器,ESP中存储了当前的堆栈用到哪里了(地址)。

3.堆栈的使用:

1)存储数据  例如当前堆栈用到了 0018FF8C
mov dword ptr ds:[18FF88],1
mov dword ptr ds:[18FF84],2//向比0018FF8C更低位的地址存储数据

2)修改栈顶指针(因为存储完数据后,你要告诉计算机,堆栈用到哪里了,不然计算机再执行程序时,会从原来的位置接着用堆栈,这样你刚刚存储的数据就被覆盖了)
sub esp,8

4.push指令:

功能:

  1. 向堆栈中压入数据
  2. 修改栈顶指针ESP寄存器(r16减2,r32减4)

指令格式:
 

push 立即数

push r32/r16寄存器(中的值)

push m16/m32 内存段  例如:PUSH DWORD PTR DS:[3AFF54]

5.pop指令

功能:

  1. 将栈顶数据储存到寄存器/内存
  2. 修改栈顶指针esp寄存器
pop eax//把当前栈顶的值拿出来储存到eax中,并且将栈顶指针加4下移

相当于
mov eax,dword ptr ds:[esp]
add esp,4

指令格式
1.pop r32/r16
2.pop m32/m16

修改EIP的指令

EIP中储存的是CPU下一次要执行的地址

1.jmp指令

mov eip,1=jum 1
mov eip,寄存器/立即数/内存(只能是dword,因为eip就是32位的)简写为 JMP 寄存器/立即数/内存

2.call指令 (执行call指令按F7)

push 下一行地址
mov eip,立即数\寄存器\内存

简写为:
call 立即数\寄存器\内存

与jmp 唯一区别:
在堆栈中存储call指令下一行。

3.ret指令

mov eip,esp 把栈顶的内容放到eip中

add esp,4 然后栈顶加4下移

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值