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

FY

Johnson 's Blog

 
 
 

日志

 
 

关于动态链接以及地址无关性的一些问题  

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

  下载LOFTER 我的照片书  |

http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3758873

问大家一个小问题,关于动态链接的,我看了深入理解计算机系统和那本程序的装载技术,一时对静态链接有所了解,然而对动态链接依然很模糊。举个例子吧,hello.c程序要用到printf函数,那其实是gcc hello.o printf.o -o hello,(假如是动态链接),这里面具体的细节不太了解。既然是动态链接,那链接自然推到了运行时,问题来了:
1.编译器在将hello.o链接成hello的过程,此时没有运行,那此时hello.o如何确定printf函数的地址呢 ??
2.地址无关性是什么意思呢?我知道库的位置要固定什么的,还有数据和代码分离,等等,但是还是很不理解。还有引入了很多的模型,什么指令跳转的,请大家帮我解释一下好吗,谢谢各位!

 

 

captivated

对于问题一, 既然实际的链接推迟到了运行时, 那么编译期的链接阶段是为了让静态链接器ld不报错(告诉ld某个模块有printf这个符号, 因此别报undefined reference错误).

问题二就比较麻烦了.  不过你实际上你只需要理解跳转指令, 并从跳转指令的角度出发来观察如何进行跳转就可以了. 从本质上来说, 跳转指令只有两种, 一种是相对当前PC(Programming Counter)跳转, 这种跳转方式需要确定目标地址相对当前PC的偏移值; 一种是绝对跳转, 跳转的目标地址由某个已知地址的变量或者寄存器给出.  你始终带着如何得到偏移值和确定目标地址的视角, 很容易就能知道为什么要给出那样的模型( 来达成地址无关性了 )......

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

历史上的今天

评论

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

页脚

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