DTDebug再介绍
左下角就是内存数据窗口。
最下面是命令行窗口。我们可以输入命令查看某一块内存的数据
db 0x0019FF74
,然后enter,就可以查看到这个内存中的数据
存储数据的顺序问题
我们往内存地址0x0019FF74中写入数据,当前0x
mov dword ptr ds:[0x0019FF74],0x12345678
F8执行
内存数据区域显示的数据和堆栈区显示的数据不一致,why?
数据的存储时有顺序的,数据在内存中,总是高位在前,低位在后。
0x0019FF74 存储的是78
0x0019FF75 存储的是56
0x0019FF76 存储的是34
0x0019FF77 存储的是12
内存寻址
通过前面很多的联系,我们可以发现,设计到内存读写最关键的就是,找到内存地址,也就是内存编号
寻找地址有哪些格式呢,主要有下面5种
下面的所有操作中,我们一定要注意MOV和LEA的区别。
- mov的前后操作数不能都是内存单元
- mov是操作内存中的值
lea是操作内存的地址
[立即数]
演示
初始状态
我们添加两条指令
执行后的结果
如果大家有迷惑,到底[0019FF74]位置存储的是12还是78?我们可以用命令证实一下:
mov dword ptr ds:[0x19FF74],0x12345678
mov byte ptr ds:[0x19FF74],0x00
结果
说明byte ptr ds[0x19FF74]存储的是78
LEA获取内存编号
再实验一下:
初始状态
添加三条命令
第二条运行完毕
第三条运行完毕
[reg]
reg代表寄存器 可以是8个通用寄存器中的任意一个
[reg+立即数]
[reg+reg*{1,2,4,8}]
注意这里只能是1、2、4、8,不能是其他的任何数字