HNU计算机系统作业第七章

题7.6

解答:

题目分析过程:
buf
:符号buf在本段代码中是一个对外部符号的引用,因此有符号表条目,因为是对外部全局变量的引用,所以他的类型是全局符号,不在本模块定义,应该在main.o中定义,处在.data节。

bufp0:符号bufp0是在本模块定义的一个全局变量并且进行了初始化,因此有符号表条目,类型是全局符号,在swap.o中定义,因为进行了初始化,所以是处在.data节。

bufp1:符号bufp1是带有static属性的全局变量,因此是一个本地符号,有符号表条目,类型是本地符号,在swap.o中定义,因为没有进行初始化,所以是处在.bss节。

swap:符号swap是在本模块中定义的一个函数,属于全局符号,有符号表条目,类型是全局符号,在swap.o中进行了定义,所以是处在.text节。

temp:temp是一个局部变量,也不是static类型,只有在引用时才会为他在栈中分配空间,因此在符号表中没有条目,也不需要提前分配空间。因此不属于任何一个节。

incr:符号incr是在本模块中定义的一个static类型的函数,属于本地符号,有符号表条目,类型是本地符号,在swap.o中进行了定义,所以是处在.text节。

count:符号count是在本模块中定义的一个static类型的局部变量,虽然是局部变量,但是是static类型,所以要提前分配空间,有符号表条目,类型是本地符号,在swap.o中进行了定义,因为进行了初始化,但是初始化的值是0,所以是处在.bss节。

 

符号    swap.o.symtab条目?     符号类型     定义符号的模块    节

buf          是            外部符号(extern)      main.o          .data

bufp0        是            全局符号(global)      swap.o          .data

bufp1        是            本地符号(local)      swap.o          .bss

swap         是            全局符号(global)      swap.o          .text

temp         否                 无            无              无

incr          是            本地符号(local)     swap.o          .text

count        是            本地符号(local)      swap.o          .bss

 

题7.12

解答:

题目分析过程:

这五个重定位的条目为绝对寻址

第1条对应代码中可以找到第15行,可以从已经重定位的text节中找到其中的存储器地址为0x080483CB,此处的值已重定位为0x0804945C,0x0804945C指向的是data节中存储的0x8049454

第2条对应代码中可以找到第16行,可以从已经重定位的text节中找到其中的存储器地址为0x080483D0,此处的值已重定位为0x08049458,0x08049458指向的是data节中存储的0x00000002

第3条对应代码中可以找到第18行,可以从已经重定位的text节中找到其中的存储器地址为0x080483D8,此处的值已重定位为0x08049548,0x08049548指向的是data节中存储的0x8049458

第4条对应代码中可以找到第18行,可以从已经重定位的text节中找到其中的存储器地址为0x080483DC,此处的值已重定位为0x08049458,0x08049458指向的是data节中存储的0x00000002

第5条对应代码中可以找到第23行,可以从已经重定位的text节中找到其中的存储器地址为0x080483E7,此处的值已重定位为0x08049548,0x08049548指向的是data节中存储的0x8049458

 

行号    运行时存储器地址      值      绝对寻址指向的.data节中的数据值

15              0x080483CB           0x0804945C            0x8049454

16              0x080483D0           0x08049458            0x0000002

18              0x080483D8           0x08049548            0x8049458

18              0x080483DC           0x08049458            0x0000002

23              0x080483E7            0x08049548            0x8049458

 

题7.13

解答:

题目分析过程:

A重定位时对于.text中的指令的修改

  1. p1中对p2和p3的引用以及对xp的引用一共三个部分进行了重定位。对函数的引用部分利用相对寻址,对xp的应用利用绝对寻址。

第一个部分是p2的引用,在第12行,可以看出此处的偏移是0x12,重定位的类型应该是相对寻址,符号的名字是p2

第二个是xp的引用,在第14行,可以看出此处的偏移是0x19,重定位的类型应该是绝对寻址,把xp的地址重定位进来,符号的名字是xp

第二个是p3的引用,在第17行,可以看出此处的偏移是0x21,重定位的类型应该是相对寻址和p2类似,符号的名字是p3

行号     节偏移        重定位类型      符号名字

12        0x12                 相对寻址                p3

14        0x19                 绝对寻址                xp

17        0x21                 相对寻址                p2

B在.data节中,需要重定位的是xp的值,他在函数p3中引用x的地址,所以xp的值需要通过绝对寻址重定位为x的地址。

在data节的第4行,节偏移是0x4,用绝对寻址定位,因为要重定位到x的地址,所以符号的名字是x

行号           节偏移              重定位类型       符号名字

4                0x4                   绝对寻址                x

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值