1. 存储单元概述
大家好,我是老张。做逆向这么多年,我见过太多芯片了。每次拿到一块新片子,第一件事就是找存储单元。为什么?因为存储单元是芯片的“记忆体”,没有它,芯片就是个傻子。
今天咱们聊聊存储单元到底是什么,它在芯片里扮演什么角色,以及常见的分类有哪些。
1.1 什么是存储单元
说白了,存储单元就是芯片里用来存数据的基本单位。一个存储单元能存1个比特(0或1)。你想想看,一个芯片里动辄几百万、几千万个这样的单元,组合起来就能存大量数据了。
我个人习惯把存储单元想象成一个小盒子。盒子里要么有电荷(代表1),要么没电荷(代表0)。就这么简单。但真正做逆向的时候,你会发现这些“小盒子”的物理实现方式五花八门。
核心概念:存储单元 = 能够保持两种稳定状态(0和1)的电路结构。
1.2 存储单元在芯片中的作用
存储单元的作用,我总结为三点:
- 保存数据:芯片运行时产生的中间结果、配置信息、程序代码,都得靠它存着
- 提供时序参考:很多存储单元(比如寄存器)还承担着同步信号的作用
- 实现状态机:芯片里的状态机,本质上就是一堆存储单元在记录当前状态
我记得有一次逆向一个老款MCU,发现它的程序计数器竟然用了DRAM结构。当时我就纳闷,DRAM需要刷新啊,这怎么用?后来仔细一看,人家用了自刷新电路。嗯,设计者确实有两把刷子。
1.3 存储单元的分类
存储单元的分类,我习惯从两个维度看:易失性和读写方式。下面这张图能帮你快速建立知识体系:
1.4 四种主流存储单元详解
1.4.1 SRAM(静态随机存取存储器)
SRAM是我在逆向中最常遇到的存储单元。它的核心是一个双稳态电路——说白了就是两个反相器交叉耦合。只要不断电,数据就能一直保持,不需要刷新。
我在项目中遇到过很多用SRAM做缓存的芯片。它的特点是快,但面积大。一个SRAM单元通常需要6个晶体管(6T结构),所以集成度不高。
逆向小技巧:在网表中识别SRAM,可以找交叉耦合的晶体管对。看到两个PMOS和两个NMOS形成正反馈结构,基本就是SRAM单元了。
1.4.2 DRAM(动态随机存取存储器)
DRAM就更有意思了。它用一个晶体管加一个电容(1T1C)来存数据。电容会漏电,所以需要定期刷新。你想想看,这就像拿个漏水的桶接水,得不停地往里加水才行。
DRAM的密度比SRAM高得多,但速度慢。在逆向中,DRAM通常出现在需要大容量存储的场景,比如显存、主存。
注意:DRAM的刷新电路在逆向时容易被忽略。我曾经吃过这个亏——看到一个DRAM阵列,以为就是个普通存储,结果没分析刷新逻辑,导致整个功能理解错了。
1.4.3 ROM(只读存储器)
ROM,顾名思义,只能读不能写(或者说不能轻易写)。它的数据在制造时就固定了。逆向ROM时,我一般直接看版图——有晶体管的地方代表0,没有的地方代表1(或者反过来,取决于设计)。
ROM的优点是稳定、便宜,适合存固件。缺点是灵活性差,想改数据?重新流片吧。
1.4.4 Flash(闪存)
Flash是现在最火的非易失性存储。它用浮栅晶体管来存电荷,断电后电荷还能留在浮栅里。Flash分两种:NOR Flash和NAND Flash。
| 特性 | NOR Flash | NAND Flash |
|---|---|---|
| 读取速度 | 快(随机读取) | 慢(只能按页读取) |
| 写入速度 | 慢 | 快 |
| 密度 | 低 | 高 |
| 典型应用 | 代码存储(如BIOS) | 数据存储(如U盘、SSD) |
| 逆向难度 | 中等 | 较高(有坏块管理) |
我个人习惯在逆向Flash时,先找它的控制寄存器。通过控制寄存器的配置,能快速判断出它是NOR还是NAND,以及具体的页大小、块大小。
1.5 小结
存储单元是芯片逆向的起点。你拿到一块芯片,先搞清楚它用了什么存储单元,就能大致猜出它的功能定位。比如:
- SRAM多 → 可能是高性能处理器或缓存芯片
- DRAM多 → 可能是内存芯片或图形芯片
- ROM多 → 可能是微控制器或专用芯片
- Flash多 → 可能是存储芯片或物联网芯片
嗯,今天就聊到这儿。记住一点:逆向不是死记硬背,而是理解设计者的思路。每种存储单元的选择背后,都有它的权衡和考量。
一句话总结:存储单元是芯片的“记忆细胞”,SRAM快但贵,DRAM密但需刷新,ROM稳但死板,Flash灵活但复杂。