欢迎光临
箫启灵个人站点

[逆向学习日志4] 内存 内存编号表现形式

clipboard.png

每个应用程序的4GB内存相当于空投支票,只有真正使用的时候,才会吧内存映射到物理内存中。 然后物理内存,再映射硬件内存。

为什么会有内存编号

<1> 内存太大没法起名字,所以只能用编号。当我们想向内存中存储数据,或者从内存中读取数据时,必须用到这个编号,就像写信必须要写收信人地址一样。每个编号,对应一个字节。8位

<2> 每个内存,都会有个内存编号,这个编号又称为内存地址(32位,前面0可以省略)。  32位的编码代表一块内存。每个编号对应一个字节,1byte,8bit 8个0和1

为什么一个应用程序的有4GB内存(因为他的寻址宽度,是32位,32bit  如果是64位的电脑,那么就会是64bit)

因为他的编码是  0x00000000 到 0xFFFFFFFF    0X00000000 也算一个编码。所以,总编码数为 0XFFFFFFFF+1 = 0x100000000 每一块内存是8bit。所以,整个应用程序所有分配的编号,所能寻找的内存总数为 0x100000000 * 8 = 0x800000000  

转成十进制 34359738368bit

34359738368 ÷  8 = 4294967296 byte

4294967296  ÷ 1024 = 4194304 KB

4194304    ÷ 1024 = 4096M

4096     ÷ 1024= 4GB

内存地址的五种形式

形式一 立即数

读取内存的值:

MOV EAX,DWORD PTR DS:[0x13FFC4]

向内存中写入数据:

MOV DWORD PTR DS:[0x13FFC4],EAX

形式二:[reg]  

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

读取内存的值:

MOV ECX,0x13FFD0

MOV EAX,DWORD PTR DS:[ECX]

向内存中写入数据:

MOV EDX,0x13FFD8

MOV DWORD PTR DS:[EDX],0x87654321

形式三:[reg+立即数] 

读取内存的值:

MOV ECX,0x13FFD0

MOV EAX,DWORD PTR DS:[ECX+4]

向内存中写入数据:

MOV EDX,0x13FFD8

MOV DWORD PTR DS:[EDX+0xC],0x87654321

形式四:[reg+reg*{1,2,4,8}] 

为了读取内存更高,所以规定只能是1 2 4 8 内存对齐  第二个reg,不能是esp

读取内存的值:

MOV EAX,13FFC4

MOV ECX,2

MOV EDX,DWORD PTR DS:[EAX+ECX*4]

向内存中写入数据:

MOV EAX,13FFC4

MOV ECX,2

MOV DWORD PTR DS:[EAX+ECX*4],87654321

形式五:[reg+reg*{1,2,4,8}+立即数]

读取内存的值:

MOV EAX,13FFC4

MOV ECX,2

MOV EDX,DWORD PTR DS:[EAX+ECX*4+4]

向内存中写入数据:

MOV EAX,13FFC4

MOV ECX,2

MOV DWORD PTR DS:[EAX+ECX*4+4],87654321

未经允许不得转载:箫启灵博客 » [逆向学习日志4] 内存 内存编号表现形式

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

刺蝴蝶De箫启灵

作死购站点VIP视频站站点