符号重定位和段重定位

这篇具有很好参考价值的文章主要介绍了符号重定位和段重定位。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

链接器的第一遍扫描将得出各个段的位置,并收集程序中所有关于全局符号与段的相对偏移量。一旦链接器决定了每个段的位置,它就需要相应的调整程序中存储的符号地址。

     调整段中的数据地址和使用绝对地址的指令地址。例如,如果一个指针指向位置100,但是段基地址被重定位为1000,那么这个指针就需要被调整到位置1100.

     调整程序中的段间引用,需要根据目标地址新的段地址进行重新计算并调整,相对地址的引用,则需要根据目标段地址以及引用者所在段的地址进行调整。

    调整全局符号的引用,例如,如果一个指令调用了例程detonate,并且detonate 所在的段起始地址为1000,段内偏移地址500,则这个调用指令中涉及的地址要调整为1500.

重定位和符号解析所要求的条件有些许不同,对于重定位,需要调整的基地址的数量相当小,也就是一个输入文件中的段的个数,不过按目标文件格式的要求。重定位的功能设计需要支持对任何段中任何地址的引用进行重定位。对于符号解析,符号的数量远远大于段的数量,但是大多数情况下链接器的符号重定位只是将符号的值插入到程序中预留的位置。

    很多链接器将段重定位统一对待,这是因为他们将段当作是一种 伪符号。不同之处只是他的值是段基地址。 这使得基于段的相对偏移量的重定位就成了基于符号的相对偏移量的重定位特例。 即使在将两种重定位同意对待的链接器中,此二者仍然有一个重要区别,符号引入会包括两个参数,符号所在的段的基地址和符号在段内的偏移地址,而段就只有基地址,没有偏移量了。有一些链接器在开始进入重定位阶段之前会预先计算所有的符号地址,将符号表中的所有符号值与段基地址相加后重新存储。也有一些链接器选择每次都去查看段基地址,在重定位时将段基地址与符号的偏移量相加。大多数情况下,这种两种方案没有什么明显有劣势,都是可以实现重定位效果。文章来源地址https://www.toymoban.com/news/detail-813180.html

到了这里,关于符号重定位和段重定位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 017+limou+C语言符号的深化理解

    您好,这里是limou3434的一篇博客,感兴趣您可以看看我的其他博文系列。本次我主要给您带来了C语言符号相关的知识。 实际上在编译期间,去注释的本质是:将注释替换成空格 C++风格注释是使用“//”将一整行代码行全部注释,而“//注释”还可以使用续行符“”接替注释

    2024年02月08日
    浏览(35)
  • C语言练习百题之位符号&的使用

    当使用C语言中的按位与运算符 时,需要理解其用途、应用场景、源代码示例以及相应的注意事项。以下是一篇关于C语言按位与运算符的详细文章,包括示例源代码和注释。 按位与运算符 是C语言中用于对二进制位进行逐位逻辑与操作的重要工具。它的主要功能是根据操作数

    2024年02月07日
    浏览(55)
  • C语言常量(整型、实型、字符型、字符串、符号常量)

    对于C语言常量,该文章有详讲,由于文章太长,可参考如下思维导图和目录,可通过目录选择自己所需要的内容阅读。 整型常量即整数,包括正整数、负整数和零。C语言中,整型常量可以用十进制、八进制、和十六进制表示。 十进制表示: 由数字0-9,正、负号组成,如3

    2024年02月07日
    浏览(41)
  • 2、Linux驱动开发:模块_引用符号

    🍅点击这里查看所有博文   随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记下来。存在很多在特殊情况下有

    2024年02月15日
    浏览(42)
  • C语言系列-预定义符号&#define定义宏&#define定义宏

     🌈个人主页:  会编辑的果子君 💫个人格言:“成为自己未来的主人~”    目录 预定义符号 #define定义常量 #define定义宏 C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。 举个例子:   基本语法: 举个例子:    思考:在define定义标识符

    2024年02月21日
    浏览(44)
  • 语言与知识:连接主义与符号主义在人工智能中的角色

    语言与知识一直是人工智能领域的核心议题。随着人工智能技术的不断发展,我们对语言和知识的理解也在不断深化。本文将探讨早期人工智能流派中的连接主义和符号主义,以及它们在实现聪明的AI和有学识的AI方面的作用。同时,我们将讨论认知智能、语言的理解以及知识

    2024年01月22日
    浏览(59)
  • C 语言中宏定义中指定数据类型, U、L、F等符号含义

    一、引言 代码中可以直接定义一个变量是可以指定变量数据类型,宏定义中也可以实现数据量类型的指定。 现在我们定义一个宏变量#define NUM 5,这个数字5是以什么类型存储的呢?答案是signed int。我们再这样定义一个宏变量#define NUM 5LL,此时的数字5又是以什么类型存储的呢

    2024年02月15日
    浏览(44)
  • 【ArcGIS Pro二次开发】(81):文本符号_CIMTextSymbol

    CIMTextSymbol是用于绘制文本图形注释的文本符号。 0、属性 Angel 文本符号的放置角度 BlockProgression 多行文本的堆叠方向 Callout 引线 DrawSoftHyphen 连字符 FlipAngle 文本翻转(镜像)到位的角度 FontEffects 上下标 FontEncoding 获取文字的Encoding FontFamilyName 字体名称 FontStyleName 字形样式,例

    2024年02月20日
    浏览(47)
  • C语言中的格式化输出符号:%d %c %p %x等

    C语言中的格式化输出符号有很多,以下是一些常见的: %d 或 %i:用于输出十进制整数。 %u:用于输出无符号十进制整数。 %f:用于输出浮点数。 %s:用于输出字符串。 %c:用于输出字符。 %p:用于输出指针。 %x 或 %X:用于输出十六进制数,%x表示输出小写字母,%X表示输出大

    2024年01月18日
    浏览(41)
  • 【ArcGIS Pro二次开发】(61):样式(Style)和符号(Symbol)

    在 ArcGIS Pro SDK 中,地图要素符号(Symbol)和符号样式(Style)是2个很重要的概念。 【Symbol】是用于表示地图上不同类型的要素(如点、线、面)的图形化表示。 在地图中,各种要素都需要通过符号来展示,符号通常包括颜色、线型、填充样式、大小等属性。在 ArcGIS Pro SDK

    2024年02月11日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包