Chinaunix

标题: gcc的参数-fPIE是什么意思? [打印本页]

作者: 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的填写已经和编译器没有关系了(前面已经解释过那是运行期行为了), 注意到这一点才能算是对地址无关代码技术有透彻的理解了哦.


作者: captivated    时间: 2012-09-17 21:29
回复 9# mr_sev


    所以, 其实结论也很简单, 就是说地址无关这种特性虽然是编译器和链接器共同协作才能最终达成的特性,

    但是基本上, 应该把它看着是一种编译器实施的技术.
    之所以这么说是因为, -fPIC是一个附加于编译期的选项. 在编译期完成之后, -fPIC无法影响运行期行为. 它只是为运行期行为做好前期准备. 而这种前期准备却恰好是获得运行期特性的关键所在. 所以, 地址无关代码主要是一个编译期技术行为.


作者: mr_sev    时间: 2012-09-27 10:30
回复 10# captivated


   只是不想仔细说,因为楼至既然问,就说明对编译,链接,动态库方面的知识不了解,片面之词解释不清,只有图文结合,还有got段  加载初期填充的是_dl_runtime_resolve的地址,只会在用到该条目才会填充
作者: mr_sev    时间: 2012-09-27 10:33
回复 11# captivated


   
作者: captivated    时间: 2012-09-27 13:17
回复 13# mr_sev


    嗯, 图表很清晰. 对Lazy Binding的表达很清楚, nice.


作者: captivated    时间: 2012-09-27 17:49
回复 13# mr_sev


    PS: 你的头像很邪恶, 是谁来的?


作者: OwnWaterloo    时间: 2012-09-27 18:19
本帖最后由 OwnWaterloo 于 2012-09-27 18:19 编辑

回复 15# captivated

鈴科百合子一方通行
作者: captivated    时间: 2012-09-27 18:25
回复 16# OwnWaterloo


    なるほど。我想起来了. 只记得炮姐了...


作者: OwnWaterloo    时间: 2012-09-27 18:31
本帖最后由 OwnWaterloo 于 2012-09-27 18:32 编辑

回复 17# captivated

嗯,炮姐才是男主女主,超电才是正传,请速度和淑(biantai)女黑子结婚
作者: captivated    时间: 2012-09-27 18:37
回复 18# OwnWaterloo

    哈哈 同感啊 刚才见你歪楼 正想要骚扰你下呢 哈哈
   
作者: cdtits    时间: 2012-09-30 11:15
产生与位置无关的代码
作者: solu    时间: 2017-05-19 11:12
厉害了,受教。
作者: solu    时间: 2017-05-19 11:13
厉害了,受教。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2