写在前面:
本次小班课的选题主要围绕CSAPP教材中的链接章节,通过实践使用readelf等工具可以加深对ELF文件内容的理解,对链接部分的理解有一定的帮助。
本文所有题目由全组同学共同完成,感谢每一位同学的支持与付出。
一、选题
选题一
深度理解可重定位目标文件和可执行目标文件。
用 C 语言实现:
引导用户自行输入设定: 一个长度有最短和最长限制的任意字符
串作为密码,要求其中必须含有大小写字母、数字和{@,#,$,-,%,
[ , ],&}之一,如果用户设定符合要求,请引导用户输入生成;如果
用户在三次设定尝试之后,依然不能产生前述符合保密需要的密码,
则自动帮助用户形成一个符合设定要求的密码,并询问用户是否采用。
要求:
(1) 实现上述功能的 C 代码,要求使用 extern,static 变量和
函数,使用 C 标准库;
(2) 将不同功能写在不同.C 文件,感受分离编译的优势,演示
在 gcc 环境下的 debug 过程;
(3) 使用 gcc 的不同参数,观察其相应的.i 文件,.s 文件和.o 文
件的内容;
(4) 应用 readelf 或 objdump 或 nm 等指令查看相关内容,并结
合第 2 版教材 P451 图 7-3,详细分析你的代码形成的目标文件
的 ELF 各部分都有什么内容;
(5) 你发现了有什么课堂上没涉及的内容出现你的ELF 文件中
吗?请尝试解读是什么;
(6) 请比较分析链接前的.o 文件和链接后的可执行文件,结合
ELF 格式,比较分析这两者内容的变化;
(7) 尝试分析可执行文件的进程映射虚存空间的内容。
(Tips:这道题难度基本集中在耐心解读你所看到的 ELF 内容和书本理论如何对
应起来,以及资料收集、分析与自证。 )