深入理解计算机系统(第二版) 家庭作业 第七章[亲测有效]

深入理解计算机系统(第二版) 家庭作业 第七章[亲测有效]7.6符号swap.o条目符号类型定义符号的模块所属的节bufYesexternmain.o.databufp0Yesglobalswap.o.databufp1

大家好,欢迎来到IT知识分享网。


7.6
符号
swap.o 条目
符号类型
定义符号的模块
所属的节
buf
Yes
extern
main.o
.data
bufp0
Yes
global
swap.o
.data
bufp1
Yes
local
swap.o
.bss
swap
Yes
global
swap.o
.text
temp
No
incr Yes local swap.o .text
count Yes local swap.o .data

7.7
可以将定义double x;移入f()内部。
也可以在double x前加上static。

7.8
A. 
a)REF(main.1)–>DEF(main.1)
b)REF(main.2)–>DEF(main.2)
B. UNKNOWN
C. ERROR

7.9
p2中的main是弱符号,链接后的引用是foo6.c中的函数main。
main的第一个字节就是0x55(pushl %ebp),所以能打印出0x55。

7.10
A. gcc p.o libx.a p.o
B. gcc p.o libx.a liby.a libx.a
C. gcc p.o liby.a libx.a liby.a libz.a

7.11
未初始化的全局变量在目标文件中是没有分配存储空间,而在加载之后,会需要一些空间。
所以这些空间可能是为.bss中的符号准备的。但具体为什么是0x104和0xe8就不清楚了。

7.12
行号
运行时存储器地址
15(bufp0)
0x080483CB
0x0804945C
16(buf[1])
0x080483D0
0x08049458
18(bufp1)
0x080483D8
0x08049548
18(buf[1])
0x080483DC
0x08049458
23(bufp1)
0x080483E7
0x08049548

7.13
这道题可以推测出来哪些代码需要重定位。
当然,我们假设所有的符号都已经有了运行时地址。
.text中有3个地方有重定位。
第12行是调用p3,返回值被放在了edx中。
14行要将xp的值放入eax。这里的0x0其实应该重定位为xp的地址,所以这应该是一个绝对引用。
接着add (%eax),%edx,也就是完成了*xp + p3()。
然后再push %edx,作为参数压入栈。
第17行是调用p2()。最后返回。
所以.text中有三个地方需要重定位。
是相对或者绝对的话,我不太清楚(猜测的)。
行号 节偏移 重定位类型 符号名字
12 0x12 相对 p3
14 0x19 绝对 xp
17 0x21 相对 p2
在.data节中,第一个x是不需要重定位的,第二个xp的值需要重定位为x的地址。
行号 节偏移 重定位类型 符号名字
12 0x04 绝对 x

7.14
汇编代码其实比较好理解。eax是val,最开始val-100和5比较,如果大于5,就直接到16行去+6。
否则根据跳转表跳到相应的地址(edx*4+0)。
所以,重定位时,需要将所有的ja和jmp指令的目的地修改为对应的地址。
(我不太明白这里该怎么重定位,因为代码中不是四个字节的地址(第7,10,12,15行),所以可能是相对的,如果是相对的就不需要重定位了)
需要注意的是第8行,jmp *0x0(,%edx,4)这一句。
这里的0x0是指.rodata的地址,这是肯定需要重定位的。
行号 节偏移 重定位类型 符号名字
8 0x11 绝对 .rodata
在.rodata中,所有的跳转表都需要重定位到相应代码的位置。
符号名字就不知道了。
行号 节偏移 重定位类型 符号名字
.rodata1 0x0,0x4,0x8,0xc,0x10,0x14 绝对 ?


7.15
用的是windows系统,不太清楚这些怎么用。
好像连LDD都没有。
而且在mingw中也没找到libc.a,倒是有libstdc++。







免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24844.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信