【嵌入式汇编基础】-操作系统基础(三)
操作系统基础(三)
文章目录
- 操作系统基础(三)
- 12、地址空间布局随机化(ASLR)
- 13、堆栈实现
- 14、共享内存
12、地址空间布局随机化(ASLR)
历史上,程序二进制文件会自行描述其在内存中的加载位置。加载器会尽力将模块加载到该地址,从而在程序执行期间保持内存加载位置的一致性。然而,在现代系统中,由于一种称为地址空间布局随机化 (Address Space Layout Randomization, ASLR) 的机制,库、程序二进制文件和其他内存数据通常会被加载到故意随机化的地址。
ASLR 的目的是增加利用应用程序中缓冲区溢出和其他内存损坏漏洞的难度。它的工作原理是阻止远程攻击者了解受害进程中代码和数据的加载位置。ASLR 并不能抵御所有内存损坏漏洞——漏洞利用者通常可以使用其他技术或漏洞来规避 ASLR。但是,由于 ASLR 性能出色,并且对于 C 和 C++ 程序员来说,启用它相对简单,无需对其应用程序进行源代码级更改,因此在现代操作系统中,通常会针对特定进程启用它。关于漏洞利用技术和 ASLR 绕过的详细解释超出了本书的讨论范围,我将在下一本从攻防角度探讨漏洞利用缓解措施的书中更详细地介绍。
然而,值得一提的是,具体的 ASLR 实现可能因操作系统而异。2017 年发表的一篇论文27发现,不同 ASLR 实现的熵在不同的操作系统中存在差异,其中大多数操作系统在 32 位操作系统中