CS:APP 第7章 链接 作业

7.6

符号 swap.o.symtab条目? 符号类型 定义符号的模块
buf 外部 m.o .data
bufp0 全局 swap.o .data
bufp1 局部 swap.o .data
swap 全局 swap.o .bss
temp —— —— ——
incr 局部 swap.o .text
count 局部 swap.o .bss

7.7

double x移入函数或者在前面加static

7.8

A

REF(main.1)->DEF(main.1)
REF(main.2)->DEF(main.2)

B

未知

C

错误

7.9

foo6.c中的main是强符号,bar6.c中的main是弱符号,弱符号被强符号所屏蔽,而编译时则仍然按照弱符号的char进行编译和打印一个字节,所以会打印main开始的一个字节,正好是push %ebp,值为0x55
书上为0x48,可能是系统不同导致的。

7.10

A

gcc p.o libx.a

B

gcc p.o libx.a liby.a libx.a

C

gcc p.o libx.a liby.a libx.a libz.a

7.11

剩下的个字节对应于运行时将被初始化为的.bss数据。

7.12

A

0xa

B

0x22

只需要计算出下一条指令到swap的距离即可。

7.13

A

找到libm.a所在位置,在我的机器上位置在/usr/lib32
使用命令:

dyume@LAPTOP-LLU88NPC:/usr/lib32$ ar -t ./libm.a

得到所有的目标文件。
libc.a同理。

B

编译后观察目标文件发现没有区别。
-g只是让编译器在编译阶段产生调试信息。

C
dyume@LAPTOP-LLU88NPC:/usr/bin$ ldd ./gcc
     linux-vdso.so.1 (0x00007ffd03d2e000)
     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9f8e72a000)
     /lib64/ld-linux-x86-64.so.2 (0x00007f9f8e928000)

你可能感兴趣的:(CS:APP 第7章 链接 作业)