首页 > 解决方案 > 分页和 PIC 可执行文件

问题描述

当使用虚拟内存时,我很难理解对 PIC 可执行文件的需求。根据我收集到的信息,每个程序都在页表中分配了一个条目,因此有一种错觉,即它拥有整个内存可供使用,而分页机制负责可能的重定位、页面错误等。所以,如果任何程序有这种错觉拥有所有可能的内存地址,为什么要使用 PIC?

标签: x86operating-systemx86-64virtual-memoryposition-independent-code

解决方案


两个主要原因:

  1. 共享库。不能保证库在特定地址加载——即使在 64 位系统上,也无法保证每个库都具有唯一的加载地址,不会与任何其他库或动态内存冲突分配。因此,共享库中的代码被编译为 PIC,以便可以将其加载到所需的任何地址。

  2. 安全。将特定代码存在于内存中可预测的位置是一种安全风险,因为它允许利用跳转到内存中的短代码“小工具”,这些小工具可以串在一起执行任意操作。在应用程序启动时随机重定位代码有助于抵御这些攻击。


推荐阅读