Switch语句与链接—计算机系统基础

        实验内容:修改二进制可重定位目标文件“phase1.o”中相关节的内容(注意不允许修改.text节和重定位节的内容),使其与main.o模块如下链接后运行时输出目标字符串“123456789”

gcc -no-pie -o linkbomb main.o phase1.o
./linkbomb
目标字符串

        实验步骤:

                1. 使用objdump工具获得目标文件的汇编代码,使用readelf工具获得其重定位记录。

                2.结合汇编代码和重定位信息,推断目标文件的汇编代码中各函数的功能作用,定位出其中负责输出的函数。

                3.构造调用输出函数的指令代码。

                4.使用构造的调用输出函数的指令代码,替换目标文件中的do_phase过程中的nop指令,实现目标字符串的输出。

        实验验证:

                1.查看反汇编代码

objdump -d phase1.o > phase1.s
cat phase1.s
00000028 <do_phase>:
  28:   55                      push   %ebp
  29:   89 e5                   mov    %esp,%ebp
  2b:   83 ec 28                sub    $0x28,%esp
  2e:   c7 45 e6 47 43 5a 56    movl   $0x565a4347,-0x1a(%ebp)
  35:   c7 45 ea 49 50 48 58    movl   $0x58485049,-0x16(%ebp)
  3c:   66 c7 45 ee 42 00       movw   $0x42,-0x12(%ebp)
  42:   c7 45 f0 00 00 00 00    movl   $0x0,-0x10(%ebp)
  49:   e9 e0 00 00 00          jmp    12e <do_phase+0x106>
  4e:   8d 55 e6                lea    -0x1a(%ebp),%edx
  51:   8b 45 f0                mov    -0x10(%ebp),%eax
  54:   01 d0                   add    %edx,%eax
  56:   0f b6 00                movzbl (%eax),%eax
  59:   88 45 f7                mov    %al,-0x9(%ebp)
  5c:   0f be 45 f7             movsbl -0x9(%ebp),%eax
  60:   83 e8 41                sub    $0x41,%eax
  63:   83 f8 19                cmp    $0x19,%eax
  66:   0f 87 b0 00 00 00       ja     11c <do_phase+0xf4>
  6c:   8b 04 85 04 00 00 00    mov    0x4(,%eax,4),%eax
  73:   ff e0                   jmp    *%eax
  75:   c6 45 f7 56             movb   $0x56,-0x9(%ebp)
  79:   e9 9e 00 00 00          jmp    11c <do_phase+0xf4>
  7e:   c6 45 f7 39             movb   $0x39,-0x9(%ebp)
  82:   e9 95 00 00 00          jmp    11c <do_phase+0xf4>
  87:   c6 45 f7 6e             movb   $0x6e,-0x9(%ebp)
  8b:   e9 8c 00 00 00          jmp    11c <do_phase+0xf4>
  90:   c6 45 f7 40             movb   $0x40,-0x9(%ebp)
  94:   e9 83 00 00 00          jmp    11c <do_phase+0xf4>
  99:   c6 45 f7 78             movb   $0x78,-0x9(%ebp)
  9d:   eb 7d                   jmp    11c <do_phase+0xf4>
  9f:   c6 45 f7 34             movb   $0x34,-0x9(%ebp)
  a3:   eb 77                   jmp    11c <do_phase+0xf4>
  a5:   c6 45 f7 3f             movb   $0x3f,-0x9(%ebp)
  a9:   eb 71                   jmp    11c <do_phase+0xf4>
  ab:   c6 45 f7 76             movb   $0x76,-0x9(%ebp)
  af:   eb 6b                   jmp    11c <do_phase+0xf4>
  b1:   c6 45 f7 49             movb   $0x49,-0x9(%ebp)
  b5:   eb 65                   jmp    11c <do_phase+0xf4>
  b7:   c6 45 f7 5b             movb   $0x5b,-0x9(%ebp)
  bb:   eb 5f                   jmp    11c <do_phase+0xf4>
  bd:   c6 45 f7 6b             movb   $0x6b,-0x9(%ebp)
  c1:   eb 59                   jmp    11c <do_phase+0xf4>
  c3:   c6 45 f7 6b             movb   $0x6b,-0x9(%ebp)
  c7:   eb 53                   jmp    11c <do_phase+0xf4>
  c9:   c6 45 f7 30             movb   $0x30,-0x9(%ebp)
  cd:   eb 4d                   jmp    11c <do_phase+0xf4>
  cf:   c6 45 f7 65             movb   $0x65,-0x9(%ebp)
  d3:   eb 47                   jmp    11c <do_phase+0xf4>
  d5:   c6 45 f7 67             movb   $0x67,-0x9(%ebp)
  d9:   eb 41                   jmp    11c <do_phase+0xf4>
  db:   c6 45 f7 5a             movb   $0x5a,-0x9(%ebp)
  df:   eb 3b                   jmp    11c <do_phase+0xf4>
  e1:   c6 45 f7 32             movb   $0x32,-0x9(%ebp)
  e5:   eb 35                   jmp    11c <do_phase+0xf4>
  e7:   c6 45 f7 38             movb   $0x38,-0x9(%ebp)
  eb:   eb 2f                   jmp    11c <do_phase+0xf4>
  ed:   c6 45 f7 77             movb   $0x77,-0x9(%ebp)
  f1:   eb 29                   jmp    11c <do_phase+0xf4>
  f3:   c6 45 f7 3f             movb   $0x3f,-0x9(%ebp)
  f7:   eb 23                   jmp    11c <do_phase+0xf4>
  f9:   c6 45 f7 37             movb   $0x37,-0x9(%ebp)
  fd:   eb 1d                   jmp    11c <do_phase+0xf4>
  ff:   c6 45 f7 33             movb   $0x33,-0x9(%ebp)
 103:   eb 17                   jmp    11c <do_phase+0xf4>
 105:   c6 45 f7 35             movb   $0x35,-0x9(%ebp)
 109:   eb 11                   jmp    11c <do_phase+0xf4>
 10b:   c6 45 f7 59             movb   $0x59,-0x9(%ebp)
 10f:   eb 0b                   jmp    11c <do_phase+0xf4>
 111:   c6 45 f7 31             movb   $0x31,-0x9(%ebp)
 115:   eb 05                   jmp    11c <do_phase+0xf4>
 117:   c6 45 f7 36             movb   $0x36,-0x9(%ebp)
 11b:   90                      nop
 11c:   8d 55 dc                lea    -0x24(%ebp),%edx
 11f:   8b 45 f0                mov    -0x10(%ebp),%eax
 122:   01 c2                   add    %eax,%edx
 124:   0f b6 45 f7             movzbl -0x9(%ebp),%eax
 128:   88 02                   mov    %al,(%edx)
 12a:   83 45 f0 01             addl   $0x1,-0x10(%ebp)
 12e:   8b 45 f0                mov    -0x10(%ebp),%eax
 131:   83 f8 08                cmp    $0x8,%eax
 134:   0f 86 14 ff ff ff       jbe    4e <do_phase+0x26>
 13a:   8d 55 dc                lea    -0x24(%ebp),%edx
 13d:   8b 45 f0                mov    -0x10(%ebp),%eax
 140:   01 d0                   add    %edx,%eax
 142:   c6 00 00                movb   $0x0,(%eax)
 145:   83 ec 0c                sub    $0xc,%esp
 148:   8d 45 dc                lea    -0x24(%ebp),%eax
 14b:   50                      push   %eax
 14c:   e8 fc ff ff ff          call   14d <do_phase+0x125>
 151:   83 c4 10                add    $0x10,%esp
 154:   90                      nop
 155:   c9                      leave  
 156:   c3                      ret    

        类似一个9层循环,思路如下


                2.修改跳转表(因为不允许修改.text节和重定位节),存放在.rodata节。

readelf -S phase1.o

        在这,我们可以看到.rodata节的偏移量为2a8, 然后我们再寻找跳转表相对.rodata的偏移量。

        所以跳转表的位置为 2a8+0x4=2ac

                3.修改跳转表

hexedit phase1.o

        以0✖56为例,它在地址为2ac+4*(56-41)=300,我们找到300

       可以看到它的绝对跳转地址为9F ,我们把它改为0×34的绝对地址也是9F,其他的修改方法也是如此。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pandas的datetime数据类型

Python的datetime对象 Python内置了datetime对象&#xff0c;可以在datetime库中找到 from datetime import datetime now datetime.now() now 还可以手动创建datetime t2 datetime(2023,4,21) now-t2 # datetime.timedelta(days251, seconds31427, microseconds546921)将…

C# WPF上位机开发(MVVM模式开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 学习过vue的同学都知道mvvm这个名词。从字面上理解&#xff0c;可能有点拗口&#xff0c;但是我们可以去理解一下它的优点是什么。mvc相信大家都明…

生产系统稳定上线600天!中国联通CUDB for OceanBase的开源共建和规模化应用

中国联通软件研究院架构部平台承载了上千应用的数据库需求&#xff0c;并且现存大量数据库使用过程缺少规范、缺少监控&#xff0c;同时还存在着数据库核心技术相关风险。为了实现核心技术自主可控&#xff0c;及时为用户解决线上问题、满足用户的功能需求&#xff0c;提供物美…

GIT提交、回滚等基本操作记录

1、add文件时warning: LF will be replaced by CRLF in .idea/workspace.xml. 原因&#xff1a;windows中的换行符为 CRLF&#xff0c; 而在Linux下的换行符为LF&#xff0c;所以在执行add . 时会出现以下提示 解决&#xff1a;git config core.autocrlf false 2、GIT命令&…

【数据库系统概论】第4章-数据库安全性

复习用&#xff0c;别看了 文章目录 4.1 计算机安全性概述4.2 数据库安全性控制4.2.1 用户标识和鉴定4.2.2 存取控制4.2.3 自主存取控制方法4.2.4 数据库角色4.2.5 强制存取控制 4.3 视图机制4.4 审计4.5 数据加密4.6 其他安全性保护 4.1 计算机安全性概述 不安全因素 4.2 …

gin框架使用系列之五——表单校验

系列目录 《gin框架使用系列之一——快速启动和url分组》《gin框架使用系列之二——uri占位符和占位符变量的获取》《gin框架使用系列之三——获取表单数据》《gin框架使用系列之四——json和protobuf的渲染》 一 、表单验证的基本理论 在第三篇中&#xff0c;我们介绍了如何…

linux系统 CentOS Tomcat 部署论坛

jdk安装命令&#xff1a;yum -y install java-1.8.0-openjdk-devel.x86_64 结尾上显示下图为成功 检查jdk环境是否配置成功命令&#xff1a;java -version或javac 显示版本 显示信息 mysql安装&#xff1a; 检查是否存mariadb数据库&#xff1a;rpm -qa | grep mariad 卸载ma…

Elasticsearch中复制一个索引数据到新的索引中

问题 我有时候&#xff0c;需要调试一个已经存在的ES索引&#xff0c;需要从已有的索引复制数据到新的索引中去。 解决 这里我借助一个GUI工具&#xff0c;来解决这个问题&#xff0c;底层它是使用Reindex的API实现索引数据复制的。利用Reindex API搞不定这个事情&#xff0…

【MATLAB】PSO粒子群优化BiLSTM(PSO_BiLSTM)的时间序列预测

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 基于PSO粒子群优化的BiLSTM的时间序列预测算法的基本原理如下&#xff1a; 「双向长短时记忆&#xff08;BiLSTM&#xff09;模型」&#xff1a;这是一种深度学习模型&#xff0c;特别适用…

C#编程艺术:Fizzler库助您高效爬取www.twitter.com音频

数据是当今数字时代的核心资源&#xff0c;但是从互联网上抓取数据并不容易。本文将教您如何利用C#编程艺术和Fizzler库高效爬取Twitter上的音频数据&#xff0c;让您轻松获取所需信息。 Twitter简介 Twitter是全球最大的社交媒体平台之一&#xff0c;包含丰富的音频资源。用…

【TensorFlow 精简版】TensorFlow Lite

目录 一 TensorFlow Lite简介 二 开发 三 开始使用 一 TensorFlow Lite简介 TensorFlow Lite 是一组工具&#xff0c;可帮助开发者在移动设备、嵌入式设备和 loT 设备上运行模型&#xff0c;以便实现设备端机器学习。 针对设备端的机器学习进行的优化&#xff1a; ① 延时&…

WPF+Halcon 培训项目实战(1-5):Halcon安装,图像处理,Halcon简单模板匹配

文章目录 前言相关链接项目专栏我个人对就业市场的评价Halcon安装实战1-4&#xff1a;Halcon基础实战5&#xff1a;模板匹配[形状匹配]实战代码 结尾 前言 为了更好地去学习WPFHalcon&#xff0c;我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主…

C++构建简单静态库实例(cmakelist)

一、开发实例 通过cmake构建静态开发实例如下: 1.1 代码目录 代码目录结构如下: 1.2 代码内容 1.2.1 CMakeLists.txt # CMake 最低版本要求 cmake_minimum_required(VERSION 3.10)# 项目名称 project(mylib)# 添加源文件 set(SOURCE_FILESsrc/mylib

连接progressql报错Cannot load JDBC driver class ‘org.postgresql.Driver‘,亲测有效!!!

Jmeter连接progressql报错Cannot load JDBC driver class ‘org.postgresql.Driver’ 1.到官方下载驱动注意&#xff1a;根据项目的JDK版本来下载对应的驱动Download | pgJDBC 2.将postgresql-42.2.27.jar复制到lib目录下面&#xff0c; 然后重新启动 连接driver信息如下&#…

mapboxgl 中热力图的实现以及给热力图点增加鼠标移上 popup 效果

文章目录 概要效果预览技术思路技术细节小结 概要 本篇文章还是关于最近做到的 mapboxgl 地图展开的。 借鉴官方示例&#xff1a;https://iclient.supermap.io/examples/mapboxgl/editor.html#heatMapLayer 效果预览 技术思路 将接口数据渲染到地图中形成热力图。还需要将热…

采集京东网数据的10个经典方法

采集京东电商网数据的10个经典方法 京东网数据采集全网抓取网页数据、商品销量、全网搜索、网页爬虫、采集网站数据、网页数据采集软件、python爬虫、HTM网页提取、APP数据抓包、APP数据采集、一站式网站采集技术、BI数据的数据分析、数据标注等成为大数据发展中的热门技术关键…

反序列化漏洞分析

接着昨天的来说&#xff0c;由于fastjson调试起来过程比较复杂&#xff0c;在这里直接看关键点&#xff1a;首先会获取字符串的第一对引号中的内容 如果内容为type就会加载下一对引号中的类 在JavaBeanInfo.class中会获取类中所有详细详细 在这里匹配以set开头的方法 methodNam…

[C/C++]排序算法 快速排序 (递归与非递归)

目录 &#x1f6a9;概念: &#x1f6a9;实现: ⚡1.hoare ⚡2.挖坑法 ⚡3.双指针法 &#x1f6a9;快速排序递归实现 &#x1f6a9;快速排序非递归实现 &#x1f6a9;概念: 通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据比另一部分的所有…

Spring中常见的BeanFactory后处理器

常见的BeanFacatory后处理器 先给出没有添加任何BeanFactory后处理器的测试代码 public class TestBeanFactoryPostProcessor {public static void main(String[] args) {GenericApplicationContext context new GenericApplicationContext();context.registerBean("co…

判断电话号码是否重复-excel

有时候重复的数据不需要或者很烦人&#xff0c;就需要采取措施&#xff0c;希望以下的方法能帮到你。 1.判断是否重复 方法一&#xff1a; 1&#xff09;针对第一个单元格输入等号&#xff0c;以及公式countif(查找记录数的范围&#xff0c;需要查找的单元格&#xff09; 2…