注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

FY

Johnson 's Blog

 
 
 

日志

 
 

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

2012-09-29 10:22:12|  分类: C Programming L |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

http://bbs.chinaunix.net/thread-732273-1-2.html

 

captivated:

ok.

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

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

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

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

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

  评论这张
 
阅读(373)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018