Windows 逆向-内存与寻址

Oyst3r 于 2023-11-25 发布

前言

寻址方式这块可以多看看,内存那些的知识其实在第一节的文章中也讲的差不多了

课堂

内存与寄存器的区别

计算机常用的计量单位

生活中常用的计量单位

误区

内存的数量特别庞大,无法每个内存单元都起一个名字,所以用编号来代替,我们称计算机 CPU 是 32 位或者 64 位,主要指的就是内存编号的宽度,而不是寄存器的宽度,有很多书上说之所以叫 32 位计算机是因为寄存器的宽度是 32 位,是不准确的,因为还有很多寄存器是大于 32 位的

计算机内存的每一个字节会有一个编号(即内存编号的单位是字节),如下图:

32 位计算机的编号最大是 32 位,也就是 32 个 1 换成 16 进制为 FFFFFFFF,也就是说,32 位计算机内存寻址的最大范围是 FFFFFFFF+1 ,内存的单位是字节,那内存中能存储的信息最多为:FFFFFFFF+1 字节   即 4G,这也是为什么我们在一个 XP 的系统上面如果物理内存超过 4G 是没有意义的原因

那么只要是 32 位的计算机,那么最多识别的内存为 4G,对吗?

不对的,因为有些操作系统可以打补丁拓展寻址范围,但是一般情况下就是 4GB,特例请看下图

内存地址格式

操作内存的汇编指令

寻址方式

我们知道数据存储在内存中,CPU 需要使用存在内存中的数据,使用一个数据就要在内存中找到这个数据,用什么找,就是用内存编号,即地址,来找到数据在内存中所在的位置,把它取出来使用,或者再放回到指定位置

上述就是一个寻址过程:寻址方式一共有五种,计算机只认识这五种方式来寻址

通过[reg+reg*1 或者 2 或者 4 或者 8]来寻址,只能是 1,2,4,8,后面学硬编码就知道了

作业

无,其实就和上节文章后面写的作业一样,就是练习

但是这里在写的时候遇到了一个困惑的问题,就是很 VC 有点不一样的地方,详情看下图

看到这个寄存器窗口就这么想:它的内存编号是从上到下的,也就是从小到大的,但是每一排的 4 个字节,是从右到左依次对应着从上到下,其他就没什么了