首页 > 系统相关 >逆向-内存

逆向-内存

时间:2023-01-06 20:22:19浏览次数:35  
标签:逆向 字节 32 4GB 地址 内存 bit

一、寄存器与内存的区别:

 

 

 

 

 

 

 

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

 

 32位计算机的编号最大是32位,也就是32个1 换成16进制为FFFFFFFF,也就是说,32位计算机内存寻址的最大范围是FFFFFFFF+1 

内存的单位是字节,那内存中能存储的信息最多为:FFFFFFFF+1 字节  即4G,这也是为什么我们在一个XP的系统上面如果物理内存超过4G是没有意义的原因。

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

 

 去网上搜索答案,大部分都会甩给一个公式

2^32 = 4GB

我当时看到这个公式的时候,没太在意,后来我自己换算了一下,发现和我理解的不一样,我换算出来后不是4G而是512M也就是0.5G。

32位就可以表示有2的32次种情况,就表示可以指向232 个地址,而最大的数字就表示可以访问的内存最大的容量,再大了,由于地址表示不了,所以就无法使用了。所以我就按下面方法进行了换算:

232 bit = 229 byte = 219 KB = 29 MB = 2-1 GB = 0.5 GB

这样一算就是32位最大只能寻址的范围就是 0.5GB啊 怎么算出是4GB呢?

内存是计算机系统的主存储器。
而CPU计算的时候不能直接访问硬盘的数据,但是可以直接访问内存的里的数据。

内存也是存储介质,内存里存放的数据其实也是只是存放0或者1这两个二进制数字,所以可以内存里有海量的小格子,每1个格子是1个bit,小格子里面就只能存放0或1。
那么如果要表示数值255需要几个格子来放呢?
根据二级制算法就是用8个格子,每个格子都是1,来表示255.
计算机规定8bit=1byte 就是1字节=8位。

内存的大小就根据格子的多少来进行计算的。

例如一个4GB的内存到底有多少格子呢?
那就将4GB转换为bit就可以了
4GB = 22 GB = 212 MB = 222 KB = 232 byte = 235 bit

也就是4GB的内存有 235 个格子。

如果每一个格子一个地址的话?那么要想全部都访问4GB的内存就需要 35位,32位是不够的。

那么32位操作系统是怎么做到可以访问4GB内存的呢?

**实际上内存是把8个bit排成1组, 每1组成为1个单位, 大小是1byte(字节), cpu每一次只能访问1个byte, 而不能单独去访问具体的1个小格子(bit). 1个byte字节就是内存的最小的IO单位.**

既然内存的最小IO单位是字节byte,那么我们其实不需要为每一个格子也就是每一bit去分配地址了,而是按照8个bit为一组,也就是一个字节分配一个地址。

其实计算机操作系统会给内存每1个字节分配1个内存地址, cpu只需要知道某个数据类型的地址, 就可以直接去到读影的内存位置去提取数据了。

明白了上面的道理,
我们再算一下,其实32位表示 232 个地址,而每一个地址是指向的是 8bit为一组的 byte ,所以要算到寻址的话,就要在乘以8 ,也就是 235 个bit,这样再换算为GB就是 4GB了。

到此终于明白了4GB是怎么算出来的了,原来 “32位操作系统” 中的“位”并不是 内存中的“bit”的概念,对应到内存中其实是“字节byte”,所以才有了 232 = 4GB 的说明法

二、内存格式

 

 1、每个内存单元的宽度为8

2、[编号]称为地址

3、地址的作用:当我们想从内存中读取数据或者想向内存中写入数据,首先应该找到要读、写的位置。就像写信要写地址一样。

三、从指定内存中写入/读取数据

mov dword ptr ds:[0x0012FF34],0x12345678

mov eax,dword ptr ds:[0x0012FF34]

dword :要读/写多少  此时是4字节   byte == 1字节  word == 2字节

ptr: Point 代表后面是一个指针 (指针的意思就是里面存的不是普通的值,而是个地址)

ds:段寄存器 先不用管 记住就行

0x0012FF34:内存编号,必须是32位的  前面0可以省略

注意:地址编号不要随便写,因为内存是有保护的,并不是所有的内存都可以直接读写(需要特别处理)

建议地址编号写成esp的值

 

 

 

 

 

 

 

 

 

标签:逆向,字节,32,4GB,地址,内存,bit
From: https://www.cnblogs.com/BDAMBXA/p/17031524.html

相关文章

  • jvm内存模型
         老年代2/3堆   new新对象      新年代 1/3eden8/10surviors01/10s11/10栈   先进后出线程运行就会分配一个......
  • 逆向-通用寄存器
    32位通用寄存器的指定用途如下:      MOV的语法:r/m8,表示8位的寄存器或内存  MOV目标操作数,源操作数作用:拷贝源操作数到目标操作数1、源操作数可以是......
  • 逆向-数据宽度-逻辑运算
    数据宽度:1、数学上的数字,是没有大小限制的,可以无限的大。但在计算机中,由于受硬件的制约,数据都是有长度限制的(我们称为数据宽度),超过最多宽度的数据会被丢弃。2、4位宽度表......
  • windows下gradle下使用windows版普罗米修斯prometheus和metrics简单的制作一个监控jav
    1.引入依赖(如果是maven可以自行翻译):例如:compile'io.prometheus:simpleclient_hotspot:0.5.0'groupid为io.prometheusartifactid为......
  • idea 内存参数修改不生效问题解决 VM参数设置不生效解决
    提示:在idea的工具栏Help->EditCustomVMOptions内修改 对应参数-Xmx1024m后重启无效的再看下面的方法 问题:ieda的默认内存大小是1024M当我开多个工......
  • 逆向-进制说明
     1、进制的定义十进制的定义:由十个符号组成,分别是0123456789逢十进一。九进制的定义:由九个符号组成,分别是012345678逢九进一。十六进制的定义:由十......
  • Go逆向总结
    一、介绍 Go语言是一个强类型静态语言,实现了CSP并发模型,并在2012年才发布首个稳定版。由于Go语言方便跨平台交叉编译,所以吸引了恶意软件开发者使用Go来开发恶意软件......
  • .Net 7 内存模型函数描述结构MethoDesc
    楔子讲一些CLR里面的内存模型。本篇MethodDesc,意为函数的描述之意,看下一个函数在CLR里面是如何被描述的。MethodDesc结构这个结构体在CLR里面高达1600多行,这里仅截取......
  • 网易云爬虫+逆向分析
    本人属于爬虫小白级别,历经重重困难终于有了点感觉,对于网易云音乐的爬虫,想为大家分享一下自己的思路,有不足的地方还望各位大佬指出。当然,目前无法下载无损音乐,也无法下载vi......
  • 记一次2022某地HVV中的逆向分析
    前言事情是这样的,国庆前期某地HVV,所以接到了客户通知他们收到了钓鱼邮件想要溯源直接下载文件逆向分析一波。钓鱼邮件,图标什么的做的还是挺逼真的,还真的挺容易中招的,但......