内存读写-内存寻址

DTDebug再介绍

image.png

左下角就是内存数据窗口。
最下面是命令行窗口。我们可以输入命令查看某一块内存的数据
db 0x0019FF74,然后enter,就可以查看到这个内存中的数据

image.png

存储数据的顺序问题

我们往内存地址0x0019FF74中写入数据,当前0x
mov dword ptr ds:[0x0019FF74],0x12345678
F8执行


内存数据区域显示的数据和堆栈区显示的数据不一致,why?

数据的存储时有顺序的,数据在内存中,总是高位在前,低位在后。


image.png

0x0019FF74 存储的是78
0x0019FF75 存储的是56
0x0019FF76 存储的是34
0x0019FF77 存储的是12

内存寻址

通过前面很多的联系,我们可以发现,设计到内存读写最关键的就是,找到内存地址,也就是内存编号
寻找地址有哪些格式呢,主要有下面5种

下面的所有操作中,我们一定要注意MOV和LEA的区别。

  1. mov的前后操作数不能都是内存单元
  2. mov是操作内存中的值
    lea是操作内存的地址

[立即数]

演示
初始状态



我们添加两条指令


红色所示就是添加的命令

执行后的结果
image.png

如果大家有迷惑,到底[0019FF74]位置存储的是12还是78?我们可以用命令证实一下:
mov dword ptr ds:[0x19FF74],0x12345678
mov byte ptr ds:[0x19FF74],0x00

结果


image.png

说明byte ptr ds[0x19FF74]存储的是78

LEA获取内存编号

再实验一下:
初始状态


image.png

添加三条命令


image.png

第二条运行完毕
image.png

第三条运行完毕
image.png

[reg]

reg代表寄存器 可以是8个通用寄存器中的任意一个


image.png

[reg+立即数]

image.png

[reg+reg*{1,2,4,8}]

image.png

注意这里只能是1、2、4、8,不能是其他的任何数字

[reg+reg*{1,2,4,8}+立即数]

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容