lostfalcon 发表于 2006-04-06 12:53

gcc的参数-fPIE是什么意思?

gcc的参数-fPIE是什么意思?

阿旺 发表于 2006-04-06 12:58

用于产生与位置无关的代码。创建动态库时,必须加这几个参数进行编译。

[ 本帖最后由 阿旺 于 2006-4-6 13:00 编辑 ]

yulc 发表于 2006-04-06 13:19

楼上的,
-fPIE is not -fPIC

wolf0403 发表于 2006-04-06 13:30

Pattern not found

伊人鹏 发表于 2012-09-14 16:09

那-Fpic 什么意思?

captivated 发表于 2012-09-15 14:14

ok.

-fPIE的意思其实和-fPIC是差不多的. 它们都是产生位置无关的代码.

只不过, -fPIE是为可执行文件产生位置无关代码, -fPIC是为共享库产生位置无关代码.

---------------------分割线-------------------------------------

地址无关代码技术是一种编译期的, 由编译器实施的技术 -- 这句话是口水话, 不过却是理解地址无关技术的关键所在之一. 很多人容易把地址无关技术和链接过程混淆起来(当然, 这些技术确实和链接过程是相关的), 导致对这种技术的理解有偏差.

captivated 发表于 2012-09-15 14:16

TMD... 一不小心, 没发现又是一张挖坟贴, 艹.

Ace_kream 发表于 2012-09-15 18:07

回复 7# captivated


    {:3_184:}

这贴有点略久啊。

谁挖的。 锹挺长啊。

mr_sev 发表于 2012-09-17 19:49

关于符号重定位,动态填写.got程序员的自我修养这本书有解释,

captivated 发表于 2012-09-17 21:04

本帖最后由 captivated 于 2012-09-17 21:32 编辑

回复 9# mr_sev


    嗯. 回答没错, 不过你还是没有注意到我的解释. 这证明你看得不够仔细(小小得意一下, 哈哈).

    地址无关代码技术是编译期由编译器实施的技术, .got不过是个类似于.data的数据段, 而且它里面的item是在加载期由动态链接器填写的. Lazy Binding先不讨论, 总体上是这样的.
    关键的地方在于, 地址无关代码的实现本身要求访问数据时对于指令的选择 -- 简单的说, 你要mov一个内存数据到寄存器, 不是简单的 movl var_addr, %ebx 这种指令的事情, 而是必须要获得内存数据对于eip亦即pc的相对偏移量, 这个才是PIC(Position Independent Code)的关键啊. 而选择使用(或者把C语言代码编译为)哪个(或者哪一系列)汇编指令, 是编译器的事情. 至于.got的填写已经和编译器没有关系了(前面已经解释过那是运行期行为了), 注意到这一点才能算是对地址无关代码技术有透彻的理解了哦.

页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: gcc的参数-fPIE是什么意思?