在计算机领域中,位置无关代码 (英文: position-independent code,缩写为PIC),又称位置无关可执行文件 (英文: position-independent executable,缩写为PIE) ,是指可在主存储器中任意位置正确地运行,而不受其绝对地址影响的一种机器码。PIC广泛使用于共享库,使得同一个库中的代码能够被加载到不同进程的地址空间中。PIC还用于缺少内存管理单元的计算机系统中,
使得操作系统能够在单一的地址空间中将不同的运行程序隔离开来。
位置无关代码能够在不做修改的情况下被复制到内存中的任意位置。这一点不同于代码,因为重定位代码需要经过链接器或加载器的特殊处理才能确定合适的运行时内存地址。
位置无关代码需要在源代码级别遵循一套特定的语义,并且需要编译器的支持。那些引用了绝对内存地址的指令(比如绝对跳转指令)必须被替换为PC相对寻址指令。这些间接处理过程可能导致PIC的运行效率下降,但是目前大多数处理器对PIC都有很好的支持,使得这效率上的这一点点下降基本可以忽略。
参见
- 动态链接器
- 目标檔、目标代码
- 代码段
- COM格式(不過不是真正的位置无关代码)
引用
深入阅读
*
外部链接
- [http://www.gentoo.org/proj/en/hardened/pic-guide.xml Introduction to Position Independent Code]
- [http://www.gentoo.org/proj/en/hardened/pic-internals.xml Position Independent Code internals]
- [https://web.archive.org/web/20150526050031/http://linux4u.jinr.ru/usoft/WWW/www_debian.org/Documentation/elf/node21.html Programming in Assembly Language with PIC]
评论 (0)