深入理解计算机操作系统第七章家庭作业

7.6

in .symtab? type module section
buf Yes external m .data
bufp0 Yes global swap .data
bufp1 Yes local swap .bss
swap Yes global swap .text
temp No ------ ----- ------
incr Yes local swap .text
count Yes local swap .bss

7.7

删除行 x = -0.0;
或者
int x 改成 double x

7.8

A.
main.1
main.2

B.
unknown
unknown

C.
error
error

7.9

0xe5894855 is 函数main的前2个指令内容。

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.
ADDR(s) = ADDR(.text) = 0x4004e0
ADDR(r.symbol) = ADDR(swap) = 0x4004f8
refaddr = ADDR(s) + r.offset = 0x4004ea
*refptr = (unsigned) (ADDR(r.symbol) + r.addend - refaddr) = 0xa

B.
ADDR(s) = ADDR(.text) = 0x4004d0
ADDR(r.symbol) = ADDR(swap) = 0x400500
refaddr = ADDR(s) + r.offset = 0x4004da
*refptr = (unsigned) (ADDR(r.symbol) + r.addend - refaddr) = 0x22

7.13

7.13

A.

libm.a path

whereis libm.a

output:

libm: /usr/lib64/libm.a /usr/lib64/libm.so

libm.a files

ar t /usr/lib64/libm.a

output:

s_lib_version.o
s_matherr.o
s_signgam.o
fclrexcpt.o
fgetexcptflg.o
fraiseexcpt.o
fsetexcptflg.o
ftestexcept.o
fegetround.o
fesetround.o
fegetenv.o
feholdexcpt.o
fesetenv.o
feupdateenv.o
t_exp.o
fedisblxcpt.o
feenablxcpt.o
fegetexcept.o
powl_helper.o
e_acos.o
e_acosh.o
e_asin.o
e_atan2.o
e_atanh.o
....

similar way for libc.a

B.

compile code with -Og and -Og -g

不一样

C.

ldd /usr/bin/gcc

    linux-vdso.so.1 =>  (0x00007ffe99d2f000)
    libm.so.6 => /lib64/libm.so.6 (0x00007fc91fb6a000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fc91f7a7000)
    /lib64/ld-linux-x86-64.so.2 (0x00005646f33c1000)