X86 ATT常用寄存器及其操作指令
X86 AT&T常用寄存器及其操作指令
常用寄存器
- esp寄存器:当我们需要访问堆栈帧中的变量时,可以使用esp寄存器来获取堆栈帧的基址,以便能够正确地访问堆栈帧中的变量。
- ebp寄存器:当我们需要调用一个函数时,可以使用ebp寄存器来获取函数的参数,以便能够正确地传递参数给函数。
- eax寄存器:当我们需要调用一个函数时,可以将函数的参数存储在eax寄存器中,以便函数能够正确地接收参数。
- ebx寄存器:当我们需要访问一个数组时,可以将数组的基址存储在ebx寄存器中,以便能够正确地访问数组。
- ecx寄存器:当我们需要实现一个循环时,可以将循环的计数器存储在ecx寄存器中,以便能够正确地实现循环。
- edx寄存器:当我们需要实现乘除法运算时,可以将乘除法运算的结果存储在edx寄存器中,以便能够正确地实现乘除法运算。
- esi寄存器:当我们需要实现字符串复制时,可以将源地址存储在esi寄存器中,以便能够正确地实现字符串复制。
- edi寄存器:当我们需要实现字符串复制时,可以将目的地址存储在edi寄存器中,以便能够正确地实现字符串复制。
- eip寄存器:当我们需要实现跳转到另一个函数时,可以将下一条指令的地址存储在eip寄存器中,以便能够正确地实现跳转。
操作指令
操作这些寄存器的指令有:mov、add、sub、inc、dec、cmp、xchg、push、pop、lea、jmp、call等。
- mov指令:用于将源操作数的值复制到目标操作数中,例如:movl %eax, %ebx,表示将eax寄存器中的值复制到ebx寄存器中。
- 例子1:movl $0x1, %eax,这条指令将值0x1存储到寄存器eax中。
例子2:leal 0x1(%ebx), %eax,这条指令将ebx + 0x1的地址存储到寄存器eax中。
在这两个例子中,movl指令将值0x1存储到eax中,而leal指令将ebx + 0x1的地址存储到eax中。
- 例子1:movl $0x1, %eax,这条指令将值0x1存储到寄存器eax中。
- add指令:用于将源操作数的值与目标操作数的值相加,例如:addl %eax, %ebx,表示将eax寄存器中的值与ebx寄存器中的值相加。
- sub指令:用于将源操作数的值减去目标操作数的值,例如:subl %eax, %ebx,表示将eax寄存器中的值减去ebx寄存器中的值。
- inc指令:用于将操作数的值加1,例如:incl %eax,表示将eax寄存器中的值加1。
- dec指令:用于将操作数的值减1,例如:decl %eax,表示将eax寄存器中的值减1。
- cmp指令:用于比较源操作数的值与目标操作数的值,例如:cmpl %eax, %ebx,表示比较eax寄存器中的值与ebx寄存器中的值。
- xchg指令:用于交换源操作数的值与目标操作数的值,例如:xchgl %eax, %ebx,表示交换eax寄存器中的值与ebx寄存器中的值。
- push指令:用于将操作数的值压入堆栈,例如:pushl %eax,表示将eax寄存器中的值压入堆栈。
- pop指令:用于将堆栈中的值弹出到操作数中,例如:popl %eax,表示将堆栈中的值弹出到eax寄存器中。
- lea指令:用于将操作数的值赋值给另一个操作数,例如:leal (%eax, %ebx), %ecx指令的作用是将eax + ebx的地址存储到ecx中。
- jmp指令:用于跳转到指定的地址,例如:jmpl 0x12345,表示跳转到地址0x12345处。call指令:用于调用指定的函数,例如:calll 0x12345,表示调用地址0x12345处的函数。
- 加减乘除操作可以使用add、sub、mul、div指令来实现
- 例如:addl %eax, %ebx,表示将eax寄存器中的值与ebx寄存器中的值相加;
- subl %eax, %ebx,表示将eax寄存器中的值减去ebx寄存器中的值;
- mull %eax, %ebx,表示将eax寄存器中的值与ebx寄存器中的值相乘;
- divl %eax, %ebx,表示将eax寄存器中的值除以ebx寄存器中的值。
- 例如:imull $2, %eax,表示将eax寄存器中的值乘以2。
- 可以使用shl指令来实现寄存器的值乘以2的幂次方,例如:shll $2, %eax,表示将eax寄存器中的值乘以4(2的2次方)
- movl (%ebx,%eax,4), %ebx指令的作用是将ebx寄存器中的值加上eax寄存器中的值乘以4后的结果,作为ebx寄存器的新值。
示例
pushl %ebp://将ebp的值压入堆栈
movl %esp, %ebp://将esp的值赋给ebp
subl $24, %esp://从esp中减去24,以便为变量分配内存
andl $-16, %esp://将esp的值与-16进行按位与运算,以确保内存对齐
movl $0, %eax://将0存入eax
subl %eax, %esp://从esp中减去eax的值,以便为变量分配内存
movl $0, -20(%ebp)://将0存入ebp-20处的内存
movl $0, -16(%ebp)://将0存入ebp-16处的内存
movl $1, -12(%ebp)://将1存入ebp-12处的内存
movl $2, -12(%ebp)://将2存入ebp-12处的内存
movl $3, -8(%ebp)://将3存入ebp-8处的内存
movl $0, %eax://将0存入eax
leave://恢复ebp的值
ret://返回
相关文章:
X86 ATT常用寄存器及其操作指令
X86 AT&T常用寄存器及其操作指令 常用寄存器 esp寄存器:当我们需要访问堆栈帧中的变量时,可以使用esp寄存器来获取堆栈帧的基址,以便能够正确地访问堆栈帧中的变量。ebp寄存器:当我们需要调用一个函数时,可以使用…...
Kotlin 高端玩法之DSL
如何在 kotlin 优雅的封装匿名内部类(DSL、高阶函数)匿名内部类在 Java 中是经常用到的一个特性,例如在 Android 开发中的各种 Listener,使用时也很简单,比如://lambda button.setOnClickListener(v -> …...
理光M2701复印机载体初始化方法
理光M2701基本参数: 产品类型:数码复合机 颜色类型:黑白 复印速度:单面:27cpm 双面:16cpm 涵盖功能:复印、打印、扫描 网络功能:支持无线、有线网络打印 接口类型:USB2.0…...
2.25Maven的安装与配置
一.Mavenmaven是一个Java世界中,非常知名的"工程管理工具"/构建工具"核心功能:1.管理依赖在进行一个A 操作之前,要先进行一个B操作.依赖有的时候是很复杂的,而且是嵌套的2.构建/编译(也是在调用jdk)3. 打包把java代码给构建成jar或者warjar就是一个特殊的压缩包…...
《英雄编程体验课》第 12 课 | 递归
文章目录 零、写在前面一、搜索算法的原理二、深度优先搜索三、基于DFS的记忆化搜索四、基于DFS的剪枝五、基于DFS的A*(迭代加深,IDA*)零、写在前面 该章节节选自 《夜深人静写算法》,主要讲解最基础的搜索算法,其中用到的思想就是递归,当然,如果已经对本套体验课了如指…...
35测试不如狗?是你自己技术不够的怨怼罢了
一、做软件测试怎么样? 引用著名软件测试专家、清华大学郑人杰教授的说法:软件测试工程师是一个越老越吃香的职业。 其中就表达了软件测试工作相对稳定、对年龄没有限制、而且随着项目经验的不断增长和对行业背景的深入了解,会越老越吃香。…...
【代码训练营】day42 | 1049. 最后一块石头的重量 II 494. 目标和 474.一和零
所用代码 java 最后一块石头的重量II LeetCode 1049 题目链接:最后一块石头的重量II LeetCode 1049 - 中等 思路 无。 把石头分成重量总和近似两堆,然后两堆石头相撞,剩下的就是最小的石头。每个石头只能用一次,01背包…...
Golang协程常见面试题
协程面试题交替打印奇数和偶数N个协程打印1到maxVal交替打印字符和数字交替打印字符串三个协程打印ABCChannel练习交替打印奇数和偶数 下面让我们一起来看看golang当中常见的算法面试题 使用两个goroutine交替打印1-100之间的奇数和偶数, 输出时按照从小到大输出. 方法一&…...
种群多样性:智能优化算法求解基准测试函数F1-F23种群动态变化图(视频)
智能优化算法求解基准测试函数F1种群动态变化图智能优化算法求解基准测试函数F2种群动态变化图智能优化算法求解基准测试函数F3种群动态变化图智能优化算法求解基准测试函数F4种群动态变化图智能优化算法求解基准测试函数F5种群动态变化图智能优化算法求解基准测试函数F6种群动…...
Qt 中的XML
XML的基本介绍: 在前端开发中:HTML是用来显示数据,而XML是用来传输和存储数据的 XML 指可扩展标记语言(EXtensible Markup Language)XML 是一种标记语言,很类似 HTMLXML 的设计宗旨是传输数据,而…...
网络应用之URL
URL学习目标能够知道URL的组成部分1. URL的概念URL的英文全拼是(Uniform Resoure Locator),表达的意思是统一资源定位符,通俗理解就是网络资源地址,也就是我们常说的网址。2. URL的组成URL的样子:https://news.163.com/18/1122/10/E178J2O4000189FH.html…...
【Linux】重定向原理dup2缓冲区
文章目录重定向原理输出重定向关于FILE解释输出重定向原理追加重定向输入重定向dup2缓冲区语言级别的缓冲区内核缓冲区重定向原理 重定向的本质就是修改文件描述符下标对应的struct file*的内容 输出重定向 输出重定向就是把本来应该输出到显示器的数据重定向输出到另一个文…...
ROG配置ubuntu20.04.5双系统要点
win11ubuntu20.04.5 1. BIOS设置 开机长按F2进入bios设置,修改advanced参数: boot -> 关闭fast bootsecurity -> 关闭secure boot设置VMD controller为Disabled(其他电脑是修改硬盘的SATA和ACHI模式)。但是改了之后windo…...
机械革命旷世G16电脑开机变成绿屏了无法使用怎么办?
机械革命旷世G16电脑开机变成绿屏了无法使用怎么办?最近有用户使用的机械革命旷世G16电脑一开机之后,电脑屏幕就变成了绿色的,无法进行任何的操作。出现这个问题可能是因为电脑中病毒了,或者是系统出现故障。我们可以通过U盘来重新…...
python中关于time模块的讲解---指定格式时间字符串转为时间戳
本文章可以解决任意字符串格式时间转为时间戳 返回json格式 可以在此基础上进行修改 时间格式控制符 说明 %Y 四位数的年份,取值范围为0001~9999,如1900 %m 月份(01~12),例如10 %d 月中的一天(01~31)例…...
MySql存储引擎与索引
MySql引擎 存储引擎是具体操作数据的地方,是一种对数据存储的技术与其配套的功能 不同存储引擎所采用存储的方式的不同,并且索引技巧与锁定水平也不同 根据业务的需求灵活的选择存储引擎即可满足的实际的需要 Innodb Innodb是MySql中的默认安装的引擎…...
typing库
typing 库 引入 在日常代码编写中,由于python语言特性,不用像go等编译性语言一样,在定义函数时就规范参数和放回值的类型。 def demo(a, b):return "ab" 此时 a 和 b 可以传入任意类型参数毫无疑问,这一特性&#…...
linux shell 入门学习笔记10内置shell命令
bash基础的内置命令 echoevalexecexportreadshift echo命令 -n 不换行输出 -e 解析字符串中的特殊符号\n 换行 \r 回车 \t 制表符 四个空格 \b 退格-n参数演示 xiao123xiao123:~/Downloads$ echo 你真胖;echo 你还挺可爱; 你真胖 你还挺可爱 xiao123xiao123:~/Downloads$ ec…...
[动手写操作系统]-02-开机运行系统并打印‘hello‘
文章目录 理解三个概念: 中断interrupts, CPU,寄存器registers 目标:让上一个静默的界面打印一些文本 我们将改进我们的无限循环引导扇区并在屏幕上打印一些东西。我们将为此提出中断。 我们尝试将"Hello"写到寄存器al, 字节0x0e写到ah (the higher part of ax),并…...
Delete `␍`eslint(prettier/prettier) in vscode 的解决方案
错误描述从 Github 仓库拉取代码,使用 vscode 打开,页面报错,每一行都爆红 (如下图)问题原因由于历史原因,windows下和linux下的文本文件的换行符不一致。Windows在换行的时候,使用了换行符CRLF…...
终极指南:ChatGPT-Web-Midjourney-Proxy如何实现实时AI交互的WebSocket通信
终极指南:ChatGPT-Web-Midjourney-Proxy如何实现实时AI交互的WebSocket通信 ChatGPT-Web-Midjourney-Proxy是一套集成ChatGPT、Midjourney和GPTs功能的全栈UI解决方案,通过WebSocket技术实现了流畅的实时AI交互体验。本文将深入解析其WebSocket通信机制…...
高性价比AI编程神器Claude Code+deepseek v4 pro+vscode——详细安装指南(2026最新版)
一.简介 这套组合性价比极高。关于Claude Code:它由Anthropic公司打造,是直接运行在终端中的AI编程助手,让你不用离开命令行就能完成代码生成、调试、重构、甚至Git提交等各种开发任务。本文将带你完成安装与配置。众所周知Claude 模型集强大…...
魔百盒CM311-1s刷机后体验:安卓9.0固件到底香不香?附5621DS无线实测
魔百盒CM311-1s刷机实战:安卓9.0系统深度评测与无线性能揭秘 当手中的魔百盒CM311-1s遇上安卓9.0系统,这场硬件与软件的碰撞会擦出怎样的火花?作为一款搭载S905L3B芯片的电视盒子,其原生系统往往受限于运营商定制化限制࿰…...
禾赛季报图解:营收6.8亿 新业务今年将贡献1亿收入 拿下奔驰大单
雷递网 雷建平 5月20日禾赛科技(纳斯达克:HSAI;港交所:2525)日前公布其截至2026年3月31日止三个月的未经审计财务业绩。财报显示,禾赛2026年第一季度实现营收6.8亿,同比增长29.6%。禾赛本季度宣…...
别再死记硬背了!用这5个HBase Shell实战场景,轻松搞定日常数据操作
HBase Shell实战手册:5个真实场景解锁高效数据操作 在数据爆炸式增长的时代,HBase作为分布式NoSQL数据库的佼佼者,凭借其高吞吐、低延迟的特性,成为处理海量结构化数据的首选方案。然而,许多开发者虽然掌握了基础命令&…...
433MHz无线模块解码避坑指南:从示波器抓波形到STM32代码实现的完整流程
433MHz无线模块解码实战:从波形分析到STM32代码优化的全流程解析 1. 解码前的硬件准备与信号捕获 当你第一次拿到433MHz无线模块时,最令人困惑的往往是"为什么我的代码无法正确解码?"要解决这个问题,我们需要从最基础的…...
Python OAuth终极指南:requests-oauthlib快速入门与实战
Python OAuth终极指南:requests-oauthlib快速入门与实战 【免费下载链接】requests-oauthlib OAuthlib support for Python-Requests! 项目地址: https://gitcode.com/gh_mirrors/re/requests-oauthlib 🔐 Python OAuth认证是现代Web开发中不可或…...
企业级RAG系统数据可信生死线:Perplexity验证功能内测权限仅剩最后17个——附白名单申请通道
更多请点击: https://kaifayun.com 第一章:企业级RAG系统数据可信生死线:Perplexity验证功能内测权限仅剩最后17个——附白名单申请通道 在企业级RAG(Retrieval-Augmented Generation)系统中,检索结果与生…...
阿里云峰会大切换:云计算三十年首换用户,全栈重做能否驱动飞轮?
【阿里云峰会现场,信息量惊人】5月20号,在杭州举办的阿里云峰会,场馆外早已排起长队。原本以为只是例行发布会,进去后却发现展区密度远超预期。AI原生应用全家桶、合作伙伴展台,还有超节点服务器实体,一路看…...
用Python和Matplotlib搞定高光谱图像可视化:从.mat文件到伪彩色图(附完整代码)
PythonMatplotlib高光谱图像可视化实战:从.mat文件到伪彩色合成 高光谱图像处理正逐渐从专业遥感领域走向更广泛的工业应用场景。当一位农业科技公司的算法工程师第一次拿到作物生长监测的高光谱数据时,面对.mat格式文件中那个神秘的三维矩阵,…...
