节区
概念
在PE和ELF这类可执行文件中,节区(section)是逻辑上划分的代码或数据块,把程序不同部分(代码、数据、资源等)分门别类存放。
内容
- 一段连续的代码或数据
- 一组权限属性(读、写、执行)
- 在磁盘和内存中的位置与大小
节区 = 数据块 + 权限 + 位置信息
作用
-
内存管理:节区可以提高操作系统分配内存页的效率
-
安全隔离:操作系统要求,只有标记为
EXECUTE的节区才能运行代码 -
加载效率:操作系统只解析节区表,然后按需将节区映射到内存。 节区让 模块化加载、地址随机化、共享库 成为可能。
内存映射:建立“文件某段”和“内存某地址”的对应关系(只是逻辑关联,不占物理内存),就好比你买了电影票,座位已经被你“逻辑上”占用了,但你还坐在家
常见节区含义
| 节区名 | 用途 | 典型权限 | 逆向意义 |
|---|---|---|---|
.text | 代码段,存放函数机器码 | R-X(可读可执行) | 逆向主战场,分析函数逻辑 |
.data | 已初始化全局/静态变量 | RW-(可读可写) | 存放配置、密钥、状态 |
.rdata | 只读数据(字符串、常量) | R--(只读) | 提取字符串线索,API 名称 |
.pdata | 异常处理信息(x86/x64) | R-- | 调试、异常恢复 |
.xdata | 异常处理数据(x64) | R-- | 同上 |
.tls | 线程局部存储(TLS) | RW- 或 R-X | TLS 回调函数常用于反调试 |
.rsrc | 资源节(图标、菜单、版本信息) | R-- | 提取资源、分析版本、隐藏数据 |
.reloc | 重定位表 | R-- | ASLR 支持,DLL 常见 |
.bss | 未初始化数据(少见) | RW- | 等价于 .data 中未初始化部分 |
.idata | 导入表(已废弃,现用 .rdata) | RW- | 存放导入函数信息 |
.edata | 导出表 | R-- | DLL 导出函数列表 |
虚拟地址
概念
虚拟地址 是程序“以为”自己在使用的内存地址,它并不是真实的物理内存地址,而是由操作系统和 CPU 协同翻译后的“逻辑地址”。
作用
- 解决不同程序地址冲突问题
- 增强安全性,程序之间不能直接访问对方的内存
- 可以让计算机运行大程序
工作原理
CPU中的一个内置的硬件单元(MMU)会查询操作系统维护的一张“地址翻译表”(记录了“哪段虚拟地址 → 哪段物理地址”),并将虚拟地址翻译为物理地址。
ASLR
ASLR(Address Space Layout Randomization,地址空间布局随机化) 是现代操作系统用来防御缓冲区溢出、代码注入等攻击的关键技术。ASLR 是一种安全机制,它让程序每次运行时,代码、数据、堆栈等内存区域的加载地址都是随机的,从而增加攻击者预测目标地址的难度。

2379

被折叠的 条评论
为什么被折叠?



