16.x86游戏实战-汇编指令push pop pushad popad

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:15.x86游戏实战-汇编指令jmp call ret

现在引入一个堆栈的概念,首先每个程序运行时,操作系统会分给它一片内存空间,这个内存空间分堆内存空间和栈内存空间,不管是堆内存还是栈内存它们都是内存空间,只是用法不一样,堆空间里存放全局数据,比如代码、常量(就是一些写死的数字、文字等),然后栈空间,用来存放局部数据,局部数据可以理解为在函数中写死的常量、数据,现在就先这样理解,现在没写代码没有画面,等后面写上c++代码了会再说,现在有这样一个概念就行

然后栈有点复杂,栈它的内存空间的使用方式,一个场景比如排队买东西,它是先卖给排在最后一个的人,排在第一个的人要最后才能买到东西,栈就是新来数据会排在最后,最后一个数据会被优先使用,所以使用栈内存空间时,有往里存放数据的代码就必须有取数据的代码,也就是要把栈给恢复了,不然会乱套

然后栈里面的数据只有被断点断下来的时候才是准确的,程序运行中看到的栈里面的数据全部都是乱的全部都是垃圾数据

然后在调用函数的时候一般在调用的函数头部会有提升栈的代码,就是本来栈最后一个数据的内存是22222,调用函数会让22222+30,加多少不固定,代码编译成程序的那一刻编译器会给搞好,这个加的操作是为了防止栈里的数据被搞坏,所以这里有加它就会有减,当函数执行完加多少它就会再减多少

push是把一个数据放到栈内存空间中(放在最后一个位置)

pop是把栈里最后一个数据取出来,也就是把刚刚push拿出来

pushad是把所有寄存器当前的值放到栈里(也是放在最后一个位置)

popad是把刚刚pushad存的值拿出来

push

执行之后,下图中的内存地址与上图不一样,是因为OD卡死了,游戏重启了,如下图可以看到执行push之后它会把数据一直放到栈里最后一个位置

pop

执行之前

执行之后,pop之后把栈里的数据放到pop后面跟的内存地址或寄存器里,然后把栈里的数据删除(esp的值-4,为什么减4?因为32位它是4字节大小)

pushad

执行之前

执行之后

上图执行之后不明显,又执行了一次pushad,可以很清晰看到把eax、ecx、edx、ebx、esp、ebp、esi、edi这八个寄存器的值都给放到了栈里

popad

执行之前

执行之后

然后上方pushad的时候执行了两次,所以好习惯是popad也两次,这一次把栈里的数据改一改,可以看popad的值去哪了

首先右击点修改

输入修改的值

执行之前

执行之后,popad它会把栈中的值重新给到八个通用寄存器


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

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

相关文章

【第29章】MyBatis-Plus之分页插件

文章目录 前言一、支持的数据库二、配置方法三、属性介绍四、自定义 Mapper 方法中使用分页五、其他注意事项六、Page 类七、实战1. 配置类2. 分页类3. 测试 总结 前言 MyBatis-Plus 的分页插件 PaginationInnerInterceptor 提供了强大的分页功能,支持多种数据库&a…

Windows电脑安装Python结合内网穿透轻松搭建可公网访问私有网盘

文章目录 前言1.本地文件服务器搭建1.1.Python的安装和设置1.2.cpolar的安装和注册 2.本地文件服务器的发布2.1.Cpolar云端设置2.2.Cpolar本地设置 3.公网访问测试4.结语 前言 本文主要介绍如何在Windows系统电脑上使用python这样的简单程序语言,在自己的电脑上搭建…

kubernetes授予用户指定命名空间的使用权限

kubernetes授予用户指定命名空间的使用权限 问题描述具体实现签发客户端证书创建RBAC策略生成kubeconfig文件 问题描述 假如我们部门来了个新同事,他需要使用kubernetes集群,但是因为他刚来,还不熟悉,所以不能直接将kubernetes集…

Spring如何控制Bean加载+执行顺序

1. Order 注解和 Ordered 接口 用途:控制组件执行顺序或排序,但不控制Bean初始化顺序。定义执行顺序:通过整数值指定组件优先级,数值越小优先级越高。集合排序:影响自动装配到集合中的组件排列顺序。使用场景&#xf…

77.MySQL的分页查询

一、LIMIT关键字 LIMIT关键字用于限制返回结果集中的行数。其基本语法如下: SELECT * FROM 表名 LIMIT 行数; 例如,要从名为mark_info的表中选择最新创建的10个工单的信息,可以执行以下查询: SELECT * FROM mark_info ORDER B…

电力需求预测挑战赛笔记 Taks1 跑通baseline

#AI夏令营 #Datawhale #夏令营 赛题 一句话介绍赛题任务可以这样理解赛题: 【训练时序预测模型助力电力需求预测】 电力需求的准确预测对于电网的稳定运行、能源的有效管理以及可再生能源的整合至关重要。 赛题任务 给定多个房屋对应电力消耗历史 N 天的相关序列数…

拓扑排序(算法篇)

算法之拓扑排序 拓扑排序 概念: 拓扑排序是对有向无圈图的顶点的一种排序。排序不必是唯一的,任何合理的排序都是可以的。具体做法是:先找出任意一个没有入边的顶点v(就是没有其他顶点指向的顶点),将顶点v放入队列,…

element-plus el-table点击当前行和划过展示鼠标

在 Element Plus 的 el-table 组件中,设置滑过行时鼠标的样式可以通过 CSS 来实现。你可以使用 CSS 的 cursor 属性来定义鼠标悬停时的样式。以下是一个简单的例子: 首先,在你的 Vue 组件的 .el-table .el-table__row:hover {cursor: poin…

09.AOP-尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)

现有代码缺陷 针对带日志功能的实现类,我们发现有如下缺陷: 对核心业务功能有干扰,导致程序员在开发核心业务功能时分散了精力附加功能分散在各个业务功能方法中,不利于统一维护 解决思路 解决核心:解耦。把附加功能从…

glm-4 联网搜索 api 测试

今天测试了一下 glm-4 的联网搜索 web_search tool 调用,发现了 web_search 的网页检索返回结果中几个比较诡异的事情,特此记录: 有些检索结果没有 icon、link、media 字段,但从内容上看确实是联网搜索出来的结果,不知…

从零开始读RocketMq源码(三)Broker存储Message流程解析

目录 前言 准备 消息载体CommitLog 文件持久化位置 源码解析 broker消息对象MessageExtBrokerInner 异步存储message CommitLog的真相 创建MappedFile文件 加入异步刷盘队列 Message异步存储MappedByteBuffer 总结 前言 在面试中我们经常会听到这样的回答&#x…

国产化趋势下源代码数据防泄密的信创沙盒的方案分享

随着国产化的大力推进,越来越多的企事业单位在逐步替换Windows、Linux等操作系统的使用。那么什是国产化了?国产化是指在产品或服务中采用国内自主研发的技术和标注,替代过去依赖的他国的产品和服务,国产化又被称之为“信创”&…

GitLab CI/CD实现项目自动化部署

1 GitLab CI/CD介绍 GitLab CI/CD 是 GitLab 中集成的一套用于软件开发的持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)工具。这套系统允许开发团队…

vue里实现点击按钮回到页面顶部功能,博客必备!

效果 步骤 1-标签结构 动态绑定样式style&#xff0c;监听点击事件&#xff0c;后续控制opacity透明度。和滚动距离 <div class"toTop" :style"dynamicStyles" click"toTop"><!--<i class"fa fa-arrow-up"></i>…

Django ORM中的F 对象

F 对象非常强大&#xff0c;可以在查询和更新操作中进行复杂的字段间运算。 假设我们有一个包含商品信息的模型 Product&#xff1a; from django.db import modelsclass Product(models.Model):name models.CharField(max_length100)price models.DecimalField(max_digits…

MySQL向自增列插入0失败问题

问题 在一次上线时&#xff0c;发现通过脚本添加的状态表中&#xff0c;待提交的状态不正确&#xff0c;本来应该是0&#xff0c;线上是101。 原因 默认情况下&#xff0c;MySQL对应自增列&#xff0c;认为0和null等价&#xff08;因为mysql认为0不是最佳实践不推荐使用&…

超简单的通配证书签发工具,免费,无需安装任何插件到本地

常见的acme.sh 或者 lego等工具需要配置&#xff0c;安装不灵活&#xff0c;续签需要配置计划任务&#xff0c;签发单域名证书或者通配证书需要不同的指令和配置&#xff0c;繁琐&#xff0c;如果自己程序想要对接签发证书的api有的不支持&#xff0c;有的用起来繁琐。 最近发…

[手机Linux PostmarketOS]三, Alpine Linux命令使用

Alpine Linux 一些常用的指令&#xff1a; 添加国内源下载链接&#xff1a; 编译以下文件&#xff0c;添加链接进去&#xff1a; sudo vi /etc/apk/repositories##清华源&#xff1a; https://mirror.tuna.tsinghua.edu.cn/alpine/latest-stable/main https://mirror.tuna.tsi…

【VIVADO SDK调试遇到DataAbortHandler】

问题 SDK调试遇到DataAbortHandler问题。 运行后不显示结果&#xff0c;debug模式下发现进入DataAbortHandler异常函数。程序中存在大数组。 原因:SDK默认的堆栈为1024bytes,需要将堆栈调大。 修改方法&#xff1a; 解决:对application中src下的lscript.ld双击&#xff0c;…

android 添加一个水平线

在Android中&#xff0c;添加一个水平线通常可以通过几种方式实现&#xff0c;最常见的是使用View组件或者自定义的Drawable。下面是一个简单的例子&#xff0c;展示如何在布局文件中添加一个水平线&#xff1a; 使用View组件 在你的布局XML文件中&#xff0c;你可以添加一个…