哈工大 csapp lab5
实验报告
实 验(五)
题 目 LinkLab
链接
专 业 计算机科学与技术
学 号 190110812
班 级 7
学 生 刘新晨
指 导 教 师 吴锐
实 验 地 点 G707
实 验 日 期 2021/5/16
计算机科学与技术学院
目 录
第1章 实验基本信息 - 3 -
1.1 实验目的 - 3 -
1.2 实验环境与工具 - 3 -
1.2.1 硬件环境 - 3 -
1.2.2 软件环境 - 3 -
1.2.3 开发工具 - 3 -
1.3 实验预习 - 3 -
第2章 实验预习 - 4 -
2.1 ELF文件格式解读 - 4 -
2.2程序的内存映像结构 - 4 -
2.3程序中符号的位置分析 - 4 -
2.4程序运行过程分析 - 4 -
第3章 各阶段的原理与方法 - 5 -
3.1 阶段1的分析 - 5 -
3.2 阶段2的分析 - 5 -
3.3 阶段3的分析 - 5 -
3.4 阶段4的分析 - 5 -
3.5 阶段5的分析 - 5 -
第4章 总结 - 6 -
4.1 请总结本次实验的收获 - 6 -
4.2 请给出对本次实验内容的建议 - 6 -
参考文献 - 7 -
第1章 实验基本信息
1.1 实验目的
理解链接的作用与工作步骤
掌握ELF结构与符号解析与重定位的工作过程
熟练使用Linux工具完成ELF分析与修改
1.2 实验环境与工具
1.2.1 硬件环境
X64 CPU;8G RAM;2.60GHz;
1.2.2 软件环境
Win10 64位以上;VMware 15.5.7; Ubuntu 64位
1.2.3 开发工具
Visual Studio 2019 64位以上;CodeBlocks 64位;vi; vim; gcc
第2章 实验预习
2.1 ELF文件格式解读
请按顺序写出ELF格式的可执行目标文件的各类信息(5分)
段头部表:将连续的文件映射到运行时的内存段
. init : 定义了_init函数,程序初始化代码会调用它
. text : 已编译程序的机器代码
. rodata : 只读数据,比如printf语句中的格式串和开关语句的跳转表
. data : 已初始化的全局和静态C变量
. bss : 未初始化的全局和静态C变量
. symtab :一个符号表,它存放在程序中定义和引用的函数和全局变量的信息
. debug : 一个调试符号表,其条目时程序中定义的全局变量和类型定义,程序中定义和引用的全局变量,以及原始的C源文件。
. line : 原始C源程序的行号和.text节中机器指令之间的映射
. strtab : 一个字符串表,其内容包括 .symtab 和 .debug节中的符号表,以及节头部中的节名字。
节头部表:描述目标文件的节。
2.2程序的内存映像结构
请按照内存地址从低到高的顺序,写出Linux下X64内存映像(5分)
内核内存
用户栈
共享库的内存映射区域
运行堆
读写段
只读代码段
2.3程序中符号的位置分析
请运行“LinkAddress -u 学号 姓名” 按地址顺序写出各符号的地址、空间。并按照Linux下X64内存映像标出其所属各区(5分)
2.4程序运行过程分析
请按顺序写出LinkAddress从开始执行到main前/后执行的子程序的名字(使用gcc与objdump/GDB/EDB)(5分)
main执行前:
Breakpoint 1 at 0x400598
<function, no debug info> _init;
Breakpoint 2 at 0x4005d0
<function, no debug info> free@plt;
Breakpoint 3 at 0x4005e0
<function, no debug info> puts@plt;
Breakpoint 4 at 0x4005f0
<function, no debug info> __stack_chk_fail@plt;
Breakpoint 5 at 0x400600
<function, no debug info> printf@plt;
Breakpoint 6 at 0x400610
<function, no debug info> __libc_start_main@plt;
Breakpoint 7 at 0x400620
<function, no debug info> malloc@plt;
Breakpoint 8 at 0x400630
<function, no debug info> exit@plt;
Breakpoint 9 at 0x400650
<function, no debug info> _start;
Breakpoint 10 at 0x400680
<function, no debug info> deregister_tm_clones;
Breakpoint 11 at 0x4006c0
<function, no debug info> register_tm_clones;
Breakpoint 12 at 0x400700
<function, no debug info> __do_global_dtors_aux;
Breakpoint 13 at 0x400720
<function, no debug info> frame_dummy;
Breakpoint 14 at 0x40074a
<function, no debug info> show_pointer;
Breakpoint 15 at 0x40077b
<function, no debug info> useless;
main执行后:
Breakpoint 16 at 0x400786
<function, no debug info> main;
Breakpoint 17 at 0x400b10
<function, no debug info> __libc_csu_init;
Breakpoint 18 at 0x400b80
<function, no debug info> __libc_csu_fini;
Breakpoint 19 at 0x400b84
<function, no debug info> _fini;
第3章 各阶段的原理与方法
每阶段40分,phasex.o 20分,分析20分,总分不超过80分
3.1 阶段1的分析
程序运行结果截图:
分析与设计的过程:
直接将main.o进行编译,得到linkbomb,运行之后显示如下截图
可以看到这是一串没有什么特殊意义字符串。我们的目标就是将该字符串的前部替换为我们的学号,最终使屏幕输出我们的学号。
用hexedit打开phase1.o后如下
学号190110812对应的ascii码为:31 39 30 31 31 30 38 31 32
将其替换即可
3.2 阶段2的分析
程序运行结果截图:
分析与设计的过程:
3.3 阶段3的分析
程序运行结果截图:
分析与设计的过程:
使用readelf工具分析phase3.o,得到如下截图
可见最终输出的字符存储在InWlvNHiCR数组中,所以我们的工作是:得到cookie数组,根据cookie数组构造InWlvNhiCR数组,要求按照cookie的索引顺序在InWlvNhiCR中依次填入自己的学号。
用edb打开linkbomb3如下图所示
得到我的cookie数组是zwelvksjr,122,119,101,108,118,107, 115, 106, 114
然后将三个文件链接在一起即可
3.4 阶段4的分析
程序运行结果截图:
分析与设计的过程:
3.5 阶段5的分析
程序运行结果截图:
分析与设计的过程:
第4章 总结
4.1 请总结本次实验的收获
对链接的作用和工作步骤有了更深的理解;
学会使用readelf工具查看elf可重定位目标文件;
学会使用hexedit对 .o文件进行修改
掌握了链接过程中的符号解析和重定位的过程
4.2 请给出对本次实验内容的建议
建议老师讲的详细一点
注:本章为酌情加分项。
参考文献
为完成本次实验你翻阅的书籍与网站等
[1] 林来兴. 空间控制技术[M]. 北京:中国宇航出版社,1992:25-42.
[2] 辛希孟. 信息技术与信息服务国际研讨会论文集:A集[C]. 北京:中国科学出版社,1999.
[3] 赵耀东. 新时代的工业工程师[M/OL]. 台北:天下文化出版社,1998 [1998-09-26]. http://www.ie.nthu.edu.tw/info/ie.newie.htm(Big5).
[4] 谌颖. 空间交会控制理论与方法研究[D]. 哈尔滨:哈尔滨工业大学,1992:8-13.
[5] KANAMORI H. Shaking Without Quaking[J]. Science,1998,279(5359):2063-2064.
[6] CHRISTINE M. Plant Physiology: Plant Biology in the Genome Era[J/OL]. Science,1998,281:331-332[1998-09-23]. http://www.sciencemag.org/cgi/ collection/anatmorp.
哈工大 csapp lab5相关推荐
- CSAPP Lab5实验记录 ---- Shell Lab(实验分析 + 完整代码)
文章目录 Lab 总结博客链接 前引 Lab5 Shell Lab 1.获取相关Lab材料 2.Overview(总览) 3.Explore(实现前的摸索) 4.函数实现 + 实现代码分析 1.eva ...
- CSAPP Lab5: Malloc
本文为USTC SSE CSAPP 2020 Fall实验三的记录,仅供参考 PPT链接在这里:Lab 5.pptx 代码在这里 mm2.c mm3.c 版本一代码如下(无注释 注释请看版本二): ...
- 2023春哈工大CSAPP大作业
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 网络空间安全 学 号 2021112406 班 级 2103901 学 生 刘晓赟 指 导 ...
- 哈工大CSAPP大作业 2022
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算学部 学 号 120L021920 班 级 2003006 学 生 李启明 指 导 教 师 吴锐 计算机科学与技术学院 202 ...
- 哈工大csapp计算机系统大作业
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算学部 学 号 120L022009 班 级 2003007 学 生 李沛聪 指 导 教 ...
- 哈工大CSAPP大作业:程序人生-Hello’s P2P
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算学部 学 号 120L021818 班 级 2003006 学 生 秦 ...
- 哈工大csapp大作业程序人生
大作业 题 目 程序人生-Hello's P2P 专 业 计算机科学与技术 学 号 2021111719 班 级 2103101 学 生 杨济荣 指 导 教 ...
- 哈工大csapp大作业报告
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算学部 学 号 120L022422 班 级 2003008 学 生 曹瑞麒 指 导 ...
- 哈工大 csapp大作业 120L021917
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算学部 学 号 120L021917 班 级 2003006 学 生 艾浩林 指 导 ...
最新文章
- 西数硬盘固件刷新工具_鲁大师Q2季度硬盘排行:三星、西数上榜产品最多
- QMouseEvent
- DataSet 的 Merge 方法
- php 自定义菜单 openid,微信公众平台开发(99) 自定义菜单获取OpenID
- java 实现 sql join_Sql 数据库 join 连接
- node-webkit学习(1)hello world
- 保护 WordPress 安全的10个方法
- ES6学习笔记(四):教你轻松搞懂ES6的新增语法
- oracle 常见错误
- Java 枚举(enum)
- android get方法的使用方法,android之HttpPostHttpGet使用方法介绍
- Google 包庇 Android 之父还给了 9000 万美元,女工程师们怒了!
- 【AtCoder】ARC090
- SQL Server 2012 - 数据表的操作
- CodeForces - 837F(二分组合思维)
- NspAction与JsonAction区别与用法
- java计算机毕业设计小区宠物管理系统源码+系统+数据库+lw文档
- 电子通信协议之CAN总线协议篇
- 群晖 VMM虚拟机安装windows XP
- 2022-2028年中国奶茶店行业竞争策略研究及未来前景展望报告