![](https://lstatic.shangxueba.com/sxbzda/h5/images/m_q_title.png)
以下每一小题给出了两个源程序文件,它们被分别编译生成可重定位目标模块m1.o和m2.0。在模块m
![](https://lstatic.shangxueba.com/sxbzda/h5/images/tips_org.png)
第1题
假设一个C语言程序有两个源文件: main.c 和test.c,它们的内容如图4.1所示。
对于编译生成的可重定位目标文件test.o,填写表4.1中各符号的情况,说明每个符号是否出现在test.o的符号表(.symtab节)中,如果是,定义该符号的模块是main.o还是test.o?该符号的类型是全局、外部,还是本地符号?该符号出现在相应定义模块的哪个节(.text、.data或,bss) ?
第2题
A.预处理的结果还是一个C语言源程序文件,属于可读的文本文件
B.经过预处理、编译和汇编处理的结果是一个可重定位目标文件
C.每个C语言源程序文件生成一个对应的可重定位目标文件
D.只要在链接命令中指定所有的相关可重定位目标文件,就能生成可执行文件
第3题
以下是两个源程序文件:
对于上述两个源程序文件链接时的符号解析。错误的是()。
A.在ml中,定义了一个强符号main和一个弱符只p
B.在m2中,定义了一个强符号p和一个强符多main
C.在模块ml的所有语句中,对符号pl的引用共有两处
D.因为出现了两个强符号main,所以会发生链接错误
第4题
A.在.text节中包含相应模块内所有机器代码
B.在.data节中包含相应模块内所有变量的初始值
C.在.rodata节中包含相应模块内所有只读数据
D.在.rel.text节和.rel.data节中包含相应节内所有可重定位信息
第5题
文件或静态库文件参数),使得链接器能够解析所有符号引用。
(I ) p.o→libx.a→liby.a→ p.o
(2) p.o→libx.a→liby.a 同时 liby.a→libx.a
(3) p.o→libx.a→liby.a→ libza 同时 liby.a→ libx.a→libz.a
第6题
以下是两个源程序文件:
对于上述两个源程序文件链接时的符号解析,错误的是()。
A.ml中对x的两处引用都与ml中对x的定义绑定
B.m2中对x的引用与m2中对x的定义绑定
C.m2中的变量p1与函数p1被分配在不同存储区
D.虽然x、main和pl都出现了多次定义,但不会发生链接错误
第7题
A.模块内函数之间的调用可用PC相对地址实现.无需动态链接器进行重定位
B.模块内数据的引用无需动态链接器进行重定位,因为引用与定义间相对位置固定
C.模块外数据的引用需要动态链接器进行重定位,重定位时在GOT中填入外部数据的地址
D.模块间函数调用需要动态链接器进行重定位,重定位时在GOT和PLT中填入相应内容
第8题
A.重定位信息是由编译器在生成汇编指令时产生的
B.指令中的重定位信息在可重定位目标文件的.rel.text节中
C.数据中的重定位信息在可重定位目标文件的.rel.data节中
D.重定位信息包含需要重定位的位置、绑定的符号和重定位类型
第9题
A.由模块m定义并能被其他模块引用的符号称为m的全局符号
B.由其他模块定义并被模块m引用的符号称为m的外部符号
C.由模块m定义并仅在m中引用的符号称为m的本地符号
D.在模块m内的某个函数中定义的局部变量称为m的局部符号
第10题
以下是两个源程序文件:
对于上述两个源程序文件链接时的符号解析,错误的是()。
A.在m1中,定义了一个强符号main和一个弱符号p
B.在m2中,定义了一个强符号p和一个本地符号main
C.在ml中,对m2中定义的强符号p的引用只有一处
D.因为出现了两个强符号main,所以会发生链接错误
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!