003-内存地址-堆栈

数据存储

数据存储的时候是从高到低位顺序存储的. 而在 数据窗口显示顺序是 低位到高位存储. 也就是,一个数字: 12345678 1 就是高位,8就是低位. 那么在寄存器中显示的就是

在这里插入图片描述

而在 数据窗口显示的就是倒过来的
87 65 43 21
这么显示

demo

问: 0012FFD8 对应的数据是 0012FFC8
那么输出 FF ,12 ,00 对应的地址是多少
在这里插入图片描述

从前面可以知道, 堆栈窗口存储的数据是逆序存储
那么:

地址数据
00
12
FF
D80012FFC8

D8 对应 C8. 那么, 从 D8 开始,在 +一:
D9 : FF
DA : 12
DB : 00
C8 对应的是D8. 是逆序存储的话, C8应该是在高位. 也就是 0012FFD8 = D8FF1200 : C8FF1200. 这时候从D8开始往下增加. 就是 D9,DA,DB

寻址公式

之前给了几个公式. 可以用来表示地址 .操作数据

一: 立即数
mov eax,dword prt ds:[0x123456]
我们还可以获取内存编号
lea eax,dword ptr ds:[0x13ffc4]
lea eax,dword ptr ds:[0x13ffc8]
地址 13ffc4 中 有个数据,这个数据所在的内存编号.就是 13ffc4. 我们获取的就是这个地址值

二: 寄存器 mov eax,dword ptr ds:[eax] mov eax,dword ptr ds:[ecx+eax]

堆栈

window 地址 00000000 是起始地址,较大的地址 window 开辟堆栈是从大往小开辟的. 我们在使用的时候, 使用 EDX 和 EBX + - 来获得堆栈内的数据地址.

练习

通过操纵栈顶栈底,获得堆栈中的数据

存入数据

存入数据,提升栈顶. 栈顶 - 4. 提升一个dword字节的空间

取出数据

取出数据,栈顶 + 4. 释放dword 字节的空间

pop,push

pop 和push 的原理就是 mov 之类的移动指令

push 0x12345678: 将 0x12345678 入栈. 之后 在将 此数据所在内存单元编号存入 esp 中

pop eax: 就是将栈顶的值出栈,之后将 栈顶的值赋给 eax寄存器. 并将 esp的值 + 4即可.
esp + 4: 栈顶减少一个内存单元.

在这里插入图片描述
还有 pop 的公式 你能想出来吗

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值