csapp attack lab phase4

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.mfbz.cn/a/152876.html

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

相关文章

线程安全与同步

线程安全问题是什么 多个线程同时操作同一个共享资源的时候可能会出现业务安全问题,称为线程安全问题。 取钱模型演示 需求:小明和小红是一对夫妻,他们有一个共同的账户,余额是10万元。 如果小明和小红同时来取钱,而…

Vue工程化

目录 一、环境准备 npm 二、Vue整站使用 1、Vue项目创建和启动 区别 目录结构 启动 2、Vue开发流程 App.vue 快速入门 3、API风格 案例 细节注意 代码实现 测试 一、环境准备 介绍:create-vue是Vue官方提供的最新的脚手架工具,用于快速生…

5个高质量的自用原型设计工具分享!

什么是原型?原型可以概括为整个产品推出前的框架设计。设计师可以用它来引导每个人参与这个项目。原型显示了每个部分之间的比重和每个部分之间的联系。原型不仅仅是一个表面的东西,它是可以和用户对话的,向用户解释该如何与产品进行交互。例…

一文讲解关于嵌入式系统程序运行的几个问题

问题1:FLASH中的代码是如何得到运行的呢?比如PC指针是在哪里由谁设置的? 以ARM为例: ARM-cortex-M3/4的单片机(比如STM32 等):该类单片机的代码在nor flash中,cortex内核可以直接运行…

Python入门教程之基本语法详解,收藏慢慢学~

文章目录 一、Python输出1、repr() 或 str() 转成字符串2、字符串填充空格进行格式化3、!a (使用 **ascii()**), !s (使用 **str()**) 和 !r (使用 **repr()**) 可以用于在格式化某个值之前对其进行转化 二、Python标识符三、Python保留字符(关键字)四、…

VC6.0 添加CMarkup文件,程序编译不成功

报错信息 Generating Code... Linking...Creating library Release/Iodevcfg.lib and object Release/Iodevcfg.exp ItemConfigDlg.obj : error LNK2001: unresolved external symbol "public: __thiscall CMarkup::~CMarkup(void)" (??1CMarkupQAEXZ) ItemConfigD…

具有mDNS功能的串口服务器

1.概述: 通过mDNS协议可以获得设备的ID、mac、IP、port等信息,方便计算机在同一个局域网内连接到具有该服务的模块。支持产品有串口服务器、串口转以太网模块、RS485串口转网口芯片等。 图 1 mDNS网络结构图 当具有mDNS的服务的设备接入网络的时候,首先…

leetcode链表必刷题——移除链表元素、设计链表、反转链表、两两交换链表中的节点、删除链表的倒数第 N 个结点、相交链表、环形链表、环形链表 II

文章目录 移除链表元素设计链表反转链表两两交换链表中的节点删除链表的倒数第 N 个结点相交链表环形链表环形链表 II 移除链表元素 题目链接 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节…

1分钟精准预测未来10天天气,谷歌开源GraphCast

11月15日,谷歌旗下著名AI研究机构Deepmind在官网宣布,开源天气大模型GraphCast,并公布了论文。 据悉,GraphCast可以在1分钟内,精准预测而来全球10天的天气情况,同时可以提前预警大暴雨、大风雪、洪水、高温…

KeyarchOS的CentOS迁移实践:使用操作系统迁移工具X2Keyarch V2.0

KeyarchOS的CentOS迁移实践:使用操作系统迁移工具X2Keyarch V2.0 作者: 猫头虎博主 文章目录 KeyarchOS的CentOS迁移实践:使用操作系统迁移工具X2Keyarch V2.0🐅摘要引言1. 迁移前的精心准备1.1 系统环境介绍1.2 深度数据验证1.2.…

语音识别芯片NRK3301在智能茶吧机的应用

传统的饮水机传大多只能提供热水和冷水,而智能茶吧机则是一款集合了热饮水机、煮茶器、泡茶壶等多种功能于一体的多功能生活电器。它不仅具备了传统饮水机的所有功能,还可以根据不同的需求,提供多种水温的饮水方式;还具备了煮茶和…

Cesium+Vue:地形开挖

作者:CSDN @ _乐多_ 本文记录了在Cesium中进行地形开挖的方法和代码。使用Vue框架。 效果如下所示, 文章目录 前言:配置Cesium一、Vue文件二、创建地形开挖函数库三、创建绘制图形库四、创建提示语库前言:配置Cesium 参考《Vue:Vue项目中的Cesium配置备忘录》

【搭建私人图床】使用LightPicture开源搭建图片管理系统并远程访问

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进,功能也越来越多,而手机…

安装PostgreSql 9.6版本报错

先去官网:Community DL Page 下载了一个“9.6.24*”版本的PostgreSql,然后开始安装。 安装PostgreSql 报错: Cant install PostgreSQL: An error occurred executing the Microsoft VC runtime installer 第一,先:右…

外汇天眼:「外汇回撤」这术语是指什么?

"外汇回撤"是外汇交易中一个常见的专业术语。对于许多投资者,尤其是初学者来说,可能并不十分理解这个术语的实质。下面我们将详细介绍外汇回撤的含义。 外汇回撤通常被称为"外汇百分比回撤"。在外汇市场出现强烈趋势波动时&#xf…

Python自动化测试之request库详解(三)

做过接口测试的都会发现,现在的接口都是HTTPS协议了,今天就写一篇如何通过request发送https请求。 什么是HTTPS HTTPS 的全称是Hyper Text Transfer Protocol over Secure Socket Layer ,是以安全为目标的HTTP通道,简单的讲是HTT…

UI游戏设计模板大放送:7种别具匠心的创意!

随着游戏产业的快速发展,UI游戏设计已经成为一个热门的设计行业,但与之前的设计相比,UI游戏设计还是比较特殊的,主要体现在UI游戏设计难度大,需要大量的手绘内容和对游戏玩法的理解上。这些门槛需要大量的时间去学习&a…

ALlegro怎么恢复到初始操作界面?

1.View 2.UI Settings 3.Reset UI To Default

Python winreg将cmd/PowerShell(管理员)添加到右键菜单

效果 1. 脚本 用管理员权限运行,重复执行会起到覆盖效果(根据sub_key)。 icon自己设置。text可以自定义。sub_key可以改但不推荐(避免改成和系统已有项冲突的)。command不要改。 from winreg import *registry r&q…

【小黑送书—第七期】>>程序员To架构师?一起来看架构师系列书籍推荐

相信大家都对未来的职业发展有着憧憬和规划,要做架构师、要做技术总监、要做CTO。对于如何实现自己的职业规划也都信心满满,努力工作、好好学习、不断提升自己。 相信成为一名优秀的架构师是很多程序员的目标,架构师的工作包罗万象&#xff…