【逆向】第四章 内存


前言

寄存器与内存的区别
1.寄存器位于CPU内部,执行速度快
2.内存速度相对慢,但是成本低,所以可以做得很大
3.寄存器和内存没有本质区别,都是存储数据的容器,都是定宽的
4.寄存器常用的八个:EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI
5.计算机中的几个常用计量单位:BYTE,WORD,DWORD
6.内存数量特别庞大,无法每一个内存单元都起一个名字,所以用编号代替,我们称计算机CPU是32位或者64位的,有很多书说32位计算机是因为寄存器的宽度是32位,是不准确的,因为还有很多寄存器是大于32位

Byte 字节 8bit
Word 字 16Bit 2字节
DWord 双字 32Bit 4字节
1KB = 1024BYte
1MB = 1024Kb
1GB = 1024MB

一、计算机内存

每一个字节都会有一个编号,有32根线,每一根线0和1,这根线有不同组合代表他能寻找的范围

0x0000000
0x0000001
0x0000002

0xFFFFFFFFF
所以每一块内存都有一个编号,内存中的编号以字节为单位,所以一个32位计算机,能寻找的地址编号有1+FFFFFFFF个,总共有4294967296(十进制)种,除以1024(K),再除1024(M),再除1024(G),得到4GB,所以三十二位计算机能识别最大内存就是4G
所以32位计算机跟寄存器没有关系,是最大能查找的寻址宽度(内存范围)的关系(注意是正常寻址,不是最大寻址,32位计算机也可以安装8G的RAM)

如图为内存格式
在这里插入图片描述
每个单元宽度为8,一字节
【编号】,加中括号和立即数分开,如【0x00000000】即为编号,就是地址

二、内存的读写

1.内存写入

写16位的数

mov [0x12345678],0xFFFF//不推荐这样写,要指定内存宽度
mov word ptr DS:[0x12345678],0xFFFF

word表示内存的宽度,ptr表示后面是地址,DS:是固定写法
注意:内存地址不要乱写,因为内存是有保护的,并不是所有内存都能读写
一定要指定内存宽度,因为他比寄存器大,寄存器可以直接舍弃,他是一大块的,不能舍弃

2.读入数据

在这里插入图片描述
写入如图代码,按下F8运行,没有报错,但是这个有很多空间不能访问,应该是异常
小技巧:ESP里面的地址,一定是允许的
在这里插入图片描述
成功修改ESP里面的值
右下角地址可以随便用
注意:这里可以看到右下角的数字是每四个编一次号,因此可以存32位,上面的结构图也可以得到解释

2.读内存

输入mov eax,dword ptr ds:[0x11F74]
在这里插入图片描述
得到上图

猜你喜欢

转载自blog.csdn.net/qq_46441427/article/details/112523423
今日推荐