csapp attack lab phase4

news2024/11/30 0:48:46

csapp attack lab phase4

每个gadget由一系列指令字节组成,最后一个字节为0xc3,编码为ret指令。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
举个例子:
48 89 c7 是指令 movq %rax, %rdi, 对应的地址是0x400f15 + 0x3 也就是0x400f18, 是开始的指令位置。

例如:
ret编码为0xc3,nop编码为0x90。
在这里插入图片描述
在这里插入图片描述
0x4019a7 + 0x4 得到地址0x4019ab

在这里插入图片描述
48 89 c7 对应的汇编指令是 mov %rax, %rdi
在这里插入图片描述
0x4019c3 + 0x2 得到地址 0x4019c5

在这里插入图片描述
rsp 存储 0x59b997fa 是cookie 的值。
在这里插入图片描述
rip存储的值是retq时候,rsp存储mov %rax, %rdi 对应的地址.

在这里插入图片描述

汇编

ret指令

当执行汇编指令ret时,计算机会进行以下操作:

  1. 将栈顶的值弹出,并将其赋值给指令指针寄存器rip,这样程序控制流会返回到调用函数的地方。
  2. 将栈顶指针rsp增加一个合适的值,以便指向上一个函数的栈帧。这样可以清除当前函数的栈帧,为返回到上一个函数做准备。

总的来说,ret指令会对rsp和rip寄存器进行操作,以实现函数返回的功能。

在执行ret指令时,栈顶指针rsp的增加值是由调用约定(calling convention)和编译器生成的代码决定的。在一般情况下,当函数调用结束时,栈需要被恢复到调用函数之前的状态,这就需要栈指针rsp回到上一个函数的栈帧。

当使用ret指令从函数返回时,它会弹出栈顶的地址并将程序计数器设置为这个地址,以便继续执行代码。一旦ret指令执行完成,弹出的地址就不再处于栈顶位置,而是成为了程序计数器所指向的位置,因此在普通情况下无法直接通过栈来访问这个地址。

如果在函数中保存了返回地址的拷贝,或者在调用ret之前将返回地址拷贝到其他位置,那么在函数返回后仍然可以通过这些拷贝来访问返回地址。但是直接通过栈来访问ret弹出的地址是不可能的。

stack frame

在x86-64架构中,一般的调用约定是将栈帧中的参数和局部变量保存在栈上,然后通过rsp指针来访问这些参数和局部变量。当函数调用结束时,栈指针rsp需要回到上一个函数的栈帧,这个值是根据当前函数的栈帧大小来计算的。

编译器会在编译时根据函数的参数、局部变量和其他需要保存在栈上的信息来计算栈帧的大小,然后在ret指令中使用适当的偏移值来恢复栈指针rsp。这个偏移值会确保rsp指向上一个函数的栈帧,从而实现函数返回的功能。

在大多数操作系统和体系结构中,栈帧的大小都是有限制的。这个限制通常由硬件和操作系统的设计决定。

在x86-64架构中,栈帧的大小受到寄存器的位数限制。例如,在64位操作系统中,通常会有一个默认的栈大小限制,例如1MB或者8MB。这个限制可以在操作系统内核中进行配置和调整。

此外,栈的大小还受到操作系统的限制,操作系统会为每个进程分配一定大小的栈空间。如果栈帧的大小超出了这个限制,就会发生栈溢出错误。

在编写程序时,需要注意栈帧的大小限制,避免过多的局部变量或者递归调用导致栈溢出。如果需要更大的栈空间,可以通过操作系统提供的机制来调整栈大小限制。

指令

将汇编转为二进制

gcc -c phase4.s 
objdump -d phase4.o > phase4.d

phase4.s
在这里插入图片描述
phase4.d
在这里插入图片描述

以十六进制的方式打印寄存器

x/x $rsp 是 GDB 中的命令,用于查看内存中地址为 $rsp 的内容。这个命令的含义是以十六进制格式显示 $rsp 地址处的内容。$rsp 是 x86 架构中的寄存器,用于存储栈顶的地址。

link

https://zhuanlan.zhihu.com/p/60724948
https://zhuanlan.zhihu.com/p/107048472

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

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

相关文章

为防下架,我把虎*牙舞蹈小姐姐视频批量下载啦~

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 环境使用: Python 3.10 解释器 Pycharm 编辑器 模块使用: requests >>> 数据请求 第三方模块 pip install requests <工具> win R 输入cmd 输入安装命令…

Android——gradle构建知识片-散装版

一、Gradle - Plugins插件库地址 Gradle - Plugins插件库地址https://plugins.gradle.org/ 二、将自己的代码Android Library发布到仓库Bintray、JCenter、JitPack 放弃JitPack&#xff0c;发布Android Library到Bintray、JCenter - 简书Bug&#xff1a;升级到gradle tools …

电压放大器的各项参数是什么意思

电压放大器是一种重要的电子设备&#xff0c;用于将输入信号的电压放大到更高的电压水平。在设计和使用电压放大器时&#xff0c;有一些关键参数需要考虑和了解。以下是西安电压放大器带来的各项参数及其意义的详细解释。 增益&#xff1a;增益是指输出电压与输入电压之间的比例…

Unity骚操作:2D横版探险游戏 Quad面片背景跟随正交摄像机移动而循环Shader图片为背景

来自:自研 10.2D横版探险游戏 Quad面片背景跟随正交摄像机移动而循环Shader图片为背景

如果面试时,问你职业规划怎么答?

对于面试官来说&#xff0c;他真的无心听你讲奋斗规划&#xff0c;问你职业规划&#xff0c;无法是想从你的言语中&#xff0c;分辨出你的稳定性&#xff0c;进取心。 1、稳定性 作为面试官&#xff0c;如果觉得你是人才&#xff0c;打算把你招进来&#xff0c;面试官最担心的…

TSINGSEE青犀智慧机房AI+视频智能监管方案,保障机房设备稳定运转

一、背景与需求分析 随着互联网的高速发展&#xff0c;机房数量及配套环境设备日益增多&#xff0c;其运行状况直接决定着企业组织的运营效率和服务质量。作为企业信息化的核心&#xff0c;机房的安全监测与管理&#xff0c;不仅关系到企业的稳定运转&#xff0c;同时也关系到…

中小企业怎么去挑选ERP系统?

中小企业该怎么去挑选ERP系统&#xff1f;本文将为大家总结了4点&#xff0c;如下&#xff1a; 先来说说中小企业选型ERP系统为什么这么难&#xff1f; 一是现在的厂商太卷了&#xff0c;选择太多&#xff0c;企业很难知道到底哪个是真正好用的。 简单来说&#xff0c;ERP其…

在Sprinng Boot中使用Redis充当缓存

关于我们使用EhCache可以适应很多的应用场景了&#xff0c;但是因为EhCache是进程内的缓存框架&#xff0c;在集群模式下&#xff0c;我们在我们的应用服务器或者云服务器之间的缓存都是独立的。故而在不同的服务器之间的进程会存在缓存不一致的情况&#xff0c;就算我们的EhCa…

Evil靶场

Evil 1.主机发现 使用命令探测存活主机&#xff0c;80.139是kali的地址&#xff0c;所以靶机地址就是80.134 fping -gaq 192.168.80.0/242.端口扫描 开放80&#xff0c;22端口 nmap -Pn -sV -p- -A 192.168.80.1343.信息收集 访问web界面 路径扫描 gobuster dir -u http…

只使用JS怎么给静态页面网站添加站内全局搜索功能?

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 背景 静态页面通常由HTML、CSS 和 JavaScript…

基于单片机的自动变速箱电控系统

**单片机设计介绍&#xff0c; 基于单片机的自动变速箱电控系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的自动变速箱电控系统是一种通过单片机来控制车辆自动变速箱的系统。它借助传感器和单片机的协同工作&am…

配电室中如何安装六氟化硫SF6气体泄漏报警装置?

六氟化硫气体泄漏报警装置安装位置产品的设计、检验、制造均遵循GB16808-2008《可燃气体报警控制器》和GB12358-2006《作业场所环境气体检测报警仪通用技术要求》严格设计。是经过高速CPU数据处理&#xff0c;通过LCD显示出探测器的浓度、状态并输出相应的控制信号。报警控制器…

口袋参谋:如何找竞争小,优势大的蓝海词?

​ 作为淘宝天猫的中小卖家&#xff0c;99.99%的人都知道流量对于店铺的重要性&#xff0c;如果没有流量的话&#xff0c;店铺是肯定没有销量的。 提高流量的方式有很多种&#xff0c;比如优化宝贝图片、标题、关键词等&#xff0c;由于在淘宝天猫上同一宝贝的竞争力太大了…

使用 Java 枚举和自定义数据类型

介绍 在 Java 编程领域&#xff0c;理解并有效利用枚举和自定义数据类型对于编写健壮、可维护且高效的代码至关重要。这篇文章旨在深入研究 Java 枚举和自定义数据类型的概念&#xff0c;提供见解和示例&#xff0c;以增强您的编码技能和知识。 理解 Java 中的枚举 枚举是枚…

Vue 2学习(路由、history 和 hash 模式、)-day014

一、路由简介 路由&#xff08;route&#xff09;就是一组 key-value 的对应关系多个路由&#xff0c;需要经过路由器&#xff08;router&#xff09;的管理 在 Vue 中也有路由&#xff0c;Vue 中的路由主要是通过 vue-rounter 这个插件库来实现&#xff0c;它的作用就是专门用…

POJ 2836 Rectangular Covering 状态压缩DP(铺砖问题)

一、题目大意 坐标系中有n个点&#xff0c;它们满足 -1000<x<1000,-1000<y<1000。 现在要在坐标系中放一些矩形&#xff0c;要使得每个点都被矩形覆盖&#xff08;被矩形的边或者顶点覆盖也可以&#xff09;&#xff0c;每个矩形都必须满足面积大于0&#xff0c;…

最新AI创作系统ChatGPT系统运营源码/支持最新GPT-4-Turbo模型/支持DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

推荐一个非常好用的uniapp的组件库【TMUI3.0】

文章目录 前言官网地址如何使用&#xff1f;注意事项后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端系列文章 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果…

flutter 绘制右上角圆角三角形标签

绘制&#xff1a; import package:jade/utils/JadeColors.dart; import package:flutter/material.dart; import dart:math as math;class LabelTopRightYellow extends StatefulWidget {final String labelTitle; // 只能两个字的&#xff08;文字偏移量没有根据文字长度改变…