csapp-linklab之第二阶段“输出学号”实验报告

本阶段主题是链接中的“重定位”。两次重定位,一次是绝对地址重定位,一次是PC相对地址重定位。

本题目标依旧是输出学号,反汇编phase2.o,看到学号“0000000000”已经存放在只读数据区了。现在任务就是改do_pheas的指令和重定位表(.rel.test)的内容。

step1 仿照phase1的代码,先写出指令的框架

00000030 <do_phase>:30:	55                   	push   %ebp31:	89 e5                	mov    %esp,%ebp33:	83 ec 08             	sub    $0x8,%esp36:	b8 xx xx xx xx       	mov    xxxxxxxx,%eax3b:	83 ec 0c             	sub    $0xc,%esp3e:	50                   	push   %eax3f:	e8 xx xx xx xx       	call   xxxxxxxx44:	83 c4 10             	add    $0x10,%esp47:	90                   	nop48:	c9                   	leave  49:	c3                   	ret    4a:	90                   	nop4b:	90                   	nop4c:	90                   	nop4d:	90                   	nop4e:	90                   	nop4f:	90                   	nop50:	90                   	nop51:	90                   	nop52:	90                   	nop53:	90                   	nop54:	5d                   	pop    %ebp55:	c3                   	ret    

两个都是x的地方就是接下来要改的地方。

step2 判断是绝对地址重定位还是PC相对地址重定位

有两种办法.

办法一:参考phase1链接后的可执行文件的机器代码

0804845d <do_phase>:804845d:	55                   	push   %ebp804845e:	89 e5                	mov    %esp,%ebp8048460:	83 ec 08             	sub    $0x8,%esp8048463:	b8 61 a0 04 08       	mov    $0x804a061,%eax8048468:	83 ec 0c             	sub    $0xc,%esp804846b:	50                   	push   %eax804846c:	e8 7f fe ff ff       	call   80482f0 <puts@plt>8048471:	83 c4 10             	add    $0x10,%esp8048474:	90                   	nop8048475:	c9                   	leave  8048476:	c3                   	ret    8048477:	66 90                	xchg   %ax,%ax8048479:	66 90                	xchg   %ax,%ax804847b:	66 90                	xchg   %ax,%ax804847d:	66 90                	xchg   %ax,%ax804847f:	90                   	nop

如上,ax那里是绝对地址,call那里用的e8,就是PC相对

办法二:看phase2.o的重定位节,命令为readelf -r phase2.o

类型那一列直接写明了。

step3 改重定位表

找出框架,eax那行需要重定位的地方的字节是37,call那是40,则用hexedit编辑phase2.o,改重定位表。

00000030 <do_phase>:30:	55                   	push   %ebp31:	89 e5                	mov    %esp,%ebp33:	83 ec 08             	sub    $0x8,%esp36:	b8 xx xx xx xx       	mov    xxxxxxxx,%eax3b:	83 ec 0c             	sub    $0xc,%esp3e:	50                   	push   %eax3f:	e8 xx xx xx xx       	call   xxxxxxxx44:	83 c4 10             	add    $0x10,%esp47:	90                   	nop48:	c9                   	leave  49:	c3                   	ret    4a:	90                   	nop4b:	90                   	nop4c:	90                   	nop4d:	90                   	nop4e:	90                   	nop4f:	90                   	nop50:	90                   	nop51:	90                   	nop52:	90                   	nop53:	90                   	nop54:	5d                   	pop    %ebp55:	c3                   	ret    

step4 代码填完整

这一步需要了解重定位的完整过程。

00000030 <do_phase>:30:	55                   	push   %ebp31:	89 e5                	mov    %esp,%ebp33:	83 ec 08             	sub    $0x8,%esp36:	b8 00 00 00 00       	mov    xxxxxxxx,%eax3b:	83 ec 0c             	sub    $0xc,%esp3e:	50                   	push   %eax3f:	e8 fc ff ff ff      	call   xxxxxxxx44:	83 c4 10             	add    $0x10,%esp47:	90                   	nop48:	c9                   	leave  49:	c3                   	ret    4a:	90                   	nop4b:	90                   	nop4c:	90                   	nop4d:	90                   	nop4e:	90                   	nop4f:	90                   	nop50:	90                   	nop51:	90                   	nop52:	90                   	nop53:	90                   	nop54:	5d                   	pop    %ebp55:	c3                   	ret    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/182242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu系统Springboot项目Nginx安装(编译安装方式)

1.下载 nginx官网下载 Index of /download/ 2.解压 这里我下载的1.25.3版本&#xff0c;系统是ubuntu 解压 tar -zxvf nginx-1.25.3.tar.gz 3.编译安装 安装前需要执行安装一些系统依赖 3.1安装PCRE库 ubuntu&#xff1a;执行以下命令 sudo apt-get install libpcre…

uniapp2023年微信小程序头像+昵称分别获取

1、DOM <view class"m-user"><view class"user-info"><!--头像 GO--><button class"avatar avatar-wrapper" open-type"chooseAvatar" chooseavatar"onChooseAvatar"slot"right"><im…

我叫:基数排序【JAVA】

1.自我介绍 基数排序(radix sort)属于“分配式排序” (distribution sort)&#xff0c;又称“桶子法” (bucket sort)或bin sort,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,是‘桶排序’的扩展 2.基本思想 将所有待比较数值统一为同样的数位长度,数位较短的数…

专业的调查问卷平台推荐:提升数据收集与分析效率

无论是学生还是职场人士&#xff0c;想做好一份调查问卷&#xff0c;关键先要确定调查的主题&#xff0c;然后确定调查人群&#xff0c;编辑问题&#xff0c;最后能够尽可能的美化问卷调查的主题。 想要做到这几点&#xff0c;就要要求问卷调查平台: 1、能够帮助你快速制作出一…

软件测试测试文档的编写和阅读

在软件测试中的流程中&#xff0c;测试文档也是一个重要的流程&#xff0c;所以测试人员也需要学习测试文档的编写和阅读。 一、定义&#xff1a; 测试文档&#xff08;Testing Documentation&#xff09;记录和描述了整个测试流程&#xff0c;它是整个测试活动中非常重要的文…

年终好价节有什么必买的数码好物?值得入手的数码好物推荐

大家是不是都没听说过好价节&#xff1f;直白点说就是原来的双十二购物狂欢节&#xff0c;只不过换一个说法&#xff0c;不过今年毕竟是第一年换个说法&#xff0c;所以淘宝年终好价节优惠还是值得我们期待的&#xff01;作为年前的最后一波大促&#xff0c;一起来看看有哪些好…

SQL server界面操作链接服务器

1.打开链接服务器&#xff0c;右击连接服务器“新建链接服务器” 2.输入链接服务器名称和数据源 3.安全性中输入密码建立远程连接&#xff0c;点击确定&#xff1a; 4.打开新建的连接服务器&#xff0c;测试连接&#xff1a; 注意:链接服务器必须在局域网执行&#xff0c;不是同…

【Openstack Train安装】十、Neutron安装

Neutron&#xff0c;是Openstack中的一大核心组件&#xff0c;设计目标是实现“网络即服务&#xff08;Networking as a Service&#xff09;”。为了达到这一目标&#xff0c;在设计上遵循了基于 SDN 实现网络虚拟化的原则&#xff0c;在实现上充分利用了 Linux 系统上的各种网…

4.5-容器之间的link

我们在实际项目中可能会有种需求&#xff0c;假如我们有个后台项目&#xff0c;它要访问数据库&#xff0c;比如MySQL&#xff0c;它想要访问数据库&#xff0c;就需要数据库的ip和端口。如果有两个容器&#xff0c;一个容器启动的是数据库的MySQL服务&#xff0c;另一个容器启…

时间序列分析【python代码实现】

时间序列分析是一种用于建模和分析时间上连续观测的统计方法。 它涉及研究数据在时间维度上的模式、趋势和周期性。常见的时间序列分析包括时间序列的平稳性检验、自相关性和部分自相关性分析、时间序列模型的建立和预测等。 下面是一个使用Python实现时间序列分析的示例&…

通过分析波形,透彻理解 UART 通信

UART是一种异步全双工串行通信协议&#xff0c;由 Tx 和 Rx 两根数据线组成&#xff0c;因为没有参考时钟信号&#xff0c;所以通信的双方必须约定串口波特率、数据位宽、奇偶校验位、停止位等配置参数&#xff0c;从而按照相同的速率进行通信。 异步通信以一个字符为传输单位…

Vue修改密码功能的源代码

基本需求 输入框不能为空 旧密码表单提交时必须正确 两次输入新密码一致 限定新密码的复杂度&#xff0c;这里是长度在 6 到 20 个字符 <template><el-form ref"form" :model"user" :rules"rules" label-width"80px"><…

给企业做公众号运营你都有哪些宝贵经验?

运营企业公众号需要长期的坚持和不断的创新&#xff0c;如何运营好一个企业公众号&#xff0c;使其成为企业与受众互动、传递价值、提升品牌形象的平台&#xff0c;是许多企业所面临的挑战。但只要不断学习&#xff0c;总结经验&#xff0c;就一定能够找到适合自己企业的公众号…

数据集笔记 :PEMS-BAY

数据地址&#xff1a;DCRNN - Google 云端硬盘 各station 位置&#xff1a;DCRNN/data/sensor_graph/graph_sensor_locations_bay.csv at master liyaguang/DCRNN (github.com) 1 读取 数据 import h5py fileDownloads/pems-bay.h5fh5py.File(file,r) f.keys()f[speed] #&…

JMeter+Jenkins接口压力测试持续集成

项目介绍 接口功能测试应用&#xff1a; http://www.weather.com.cn/data/cityinfo/<city_code>.html 测试功能&#xff1a;获取对应城市的天气预报 请求方法&#xff1a;Get 压测脚本开发工具&#xff1a;jmeter 源码脚本位置&#xff1a; https://github.com/shife…

基于SpringCloud的动漫论坛

基于SpringCloud的动漫论坛《BOKI》 摘要&#xff1a;鉴于现如今的互联网网站的存在形式&#xff0c;网站内部有可能内嵌论坛&#xff0c;因此&#xff0c;该项目中实现一个整体的、可移植性强的插件式论坛&#xff0c;论坛就有可能突破ACG主题的限制&#xff0c;实现论坛与主…

ZKP15.3 Formal Methods in ZK (Part II)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 15: Secure ZK Circuits via Formal Methods (Guest Lecturer: Yu Feng (UCSB & Veridise)) 15.3 Formal Methods in ZK (Part II) Formally prove that a circuit is NOT underconstrained Existing Strategies Static …

异步操作的方法

在高级语言中已经有了异步的原语言&#xff0c;而在C 中的最好的方式就是 libevent 的方式,我这还是相当认同的&#xff0c;高级语言就不需要在苦哈哈的&#xff0c;事件转圈了&#xff0c;但是原理还是以事件为基础的 一句话就是在一个循环中等着他执行完,这个循环中有很多其他…

NX二次开发UF_CURVE_create_arc_thru_3pts 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_create_arc_thru_3pts Defined in: uf_curve.h int UF_CURVE_create_arc_thru_3pts(int create_flag, double first_point [ 3 ] , double second_point [ 3 ] , double th…

Git提示 Connection closed by remote host

问题如下图&#xff1a; 解决&#xff1a; 删除./ssh目录下的config文件&#xff0c;如下图config文件是新增的 原因&#xff1a;不知道什么原因&#xff0c;连接外网后突然断开或导致自动增加config文件。