由于ASLR是一种操作系统层面的技术,而二进制程序本身是不支持随机化加载的,便出现了些绕过方式,例如ret2plt、GOT劫持、地址爆破等。于是,人们于2003年引入了位置无关可执行文件(Posifion-Independent Bxecutable,PIE),它在应用层的编译器上实现,通过将程序编译为位置无关代码( Position-Independent Code,PIC),使程序可以被加载到任意位置,就像是一个特殊的共享库。在PIE和 ASLR 同时开启的情况下,攻击者将对程序的内存布局一无所知,大大增加了利用难度当然凡事有利也有弊,在增加安全性的同时,PIE也会一定程度上影响性能,因此在大多数操作系统上 PIE 仅用于一些对安全性要求比较高的程序。