大家好,欢迎来到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