为什么现代GCC默认将文件编译为PIE



据我所知,PIC主要用于共享库,因此GCC没有将可执行文件编译为PIE的意图,除非有人建议它这样做。此外,PIE可执行文件也没有那么有用,因为在每个进程的虚拟地址空间中,只有一个可执行映像启动它,并且PIE在不同的虚拟库中被多次加载。

PIE允许动态加载程序在虚拟地址空间中随机化进程位置(通过所谓的ASLR技术(,这有助于抵御某些类型的攻击。

请注意,程序段被映射为只读,这允许内核重用同一组物理页,而不会浪费内存(.got重定位段除外(。

最新更新