首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >目标文件中符号表和重定位表

目标文件中符号表和重定位表
EN

Stack Overflow用户
提问于 2013-05-25 20:21:45
回答 1查看 19.5K关注 0票数 10

据我所知,目标文件中的指令和数据都有地址。第一数据项开始于地址0,并且第一指令也开始于地址0。

重定位表包含有关在文件中的地址改变时需要更新的指令的信息,例如,如果该文件与另一个文件链接在一起。在下面的示例中,行A将位于重定位表中。我认为B不会在重定位表中,因为标签"equal“的地址是相对于B的。这些假设正确吗?

我知道符号表显示了文件所具有的标签以及尚未解析的标签。但是符号表还包含哪些其他信息呢?

此外,当汇编程序将指令翻译成二进制时,在那些具有未解析引用的指令中放置了什么?在本例中为B。

代码语言:javascript
运行
复制
.data
TEXT: .asciiz "Foo"

.text
.global main
main:
     li t0, 1
     beq t0, 1, equal #B

equal:
    la a0, TEXT
    jal printf #A
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-25 22:02:49

是的,你的假设是正确的。重定位有多种类型,汇编程序发送到指令中的内容取决于类型。通常,它是要添加的偏移量。您可以使用objdump -dr查看位置调整。为了更好地说明,我对您的代码做了一些修改:

代码语言:javascript
运行
复制
.data
.int 0
TEXT: .asciiz "Foo"
.text
.global main
main:
     li $t0, 1
     beq $t0, 1, equal #B
     bne $t0, 42, foo  #C

equal:
     la $a0, TEXT
     jal printf #A

objdump的输出:

代码语言:javascript
运行
复制
00000000 <main>:
   0:   24080001        li      t0,1
   4:   24010001        li      at,1
   8:   11010004        beq     t0,at,1c <equal>
   c:   00000000        nop
  10:   2401002a        li      at,42
  14:   1501ffff        bne     t0,at,14 <main+0x14>
                        14: R_MIPS_PC16 foo
  18:   00000000        nop

0000001c <equal>:
  1c:   3c040000        lui     a0,0x0
                        1c: R_MIPS_HI16 .data
  20:   0c000000        jal     0 <main>
                        20: R_MIPS_26   printf
  24:   24840004        addiu   a0,a0,4
                        24: R_MIPS_LO16 .data

正如您所说的,beq没有重定位,因为它是这个目标文件中的相对地址。

我添加的bne (用C标记的行)引用了一个外部符号,因此即使该地址是相对的,也需要一个重新定位条目。其类型为R_MIPS_PC16,以产生对符号foo的16位带符号字偏移。由于指令编码需要下一个字的偏移量,而不是重定位使用的当前PC,因此必须减去1,并将其编码为2的补码ffff到指令本身。

汇编程序已将la伪指令转换为lui/addiu对(后者在jal的延迟槽中)。对于lui,将针对将填充最高16位的.data部分创建R_MIPS_HI16重定位。由于符号TEXT位于.data部分中的地址4,因此偏移量的前16位为0。这意味着指令包含0偏移量。类似地,对于低16位,除了那里,指令包含偏移量4

最后,jal printf使用了另一种重定位,这种重定位是为指令所需的编码量身定做的。偏移量为零,因为跳转直接指向被引用的符号。注意,objdump试图通过解码来提供帮助,但是它不处理重定位,所以它输出的<main>当然是无用的。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16749522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档