CSAPP BOMB LAB part3

CSAPP BOMB LAB part3

phase_4

bomb.s phase_4的代码:
在这里插入图片描述
格式:
在这里插入图片描述
40102e行,比较0x8+rsp的值和0xe, 需要让0x8+rsp小于0xe, 然后跳转到40103a,
在这里插入图片描述
func函数根据bomb.s 转化为c代码:
在这里插入图片描述
这个直接参考了知乎网友的翻译,
在这里插入图片描述
func4的返回值等于0, 跳转到40105d。

汇编语法

jne指令

jne指令是x86汇编语言中的一条条件跳转指令,用于在不相等的情况下进行跳转。

jne指令的语法如下:

jne label

其中,label是一个标签,用于指定跳转的目标位置。

jne指令根据条件码寄存器的值来进行跳转。如果ZF为0,则跳转到label指定的位置。条件码寄存器的ZF位表示零标志位,当上一条指令的结果为零时,ZF被设置为1,否则为0。

下面是一个示例,展示了jne指令的使用:

section .datavar1 dw 10var2 dw 20section .textglobal _start_start:mov ax, [var1]mov bx, [var2]cmp ax, bxjne not_equal; 如果var1等于var2,则继续执行下面的指令; ...not_equal:; 如果var1不等于var2,则跳转到not_equal标签处执行相应的代码块; ...; 继续执行下面的指令; ...end:; 结束程序mov eax, 1int 0x80

在上面的示例中,我们定义了两个变量var1var2,并将它们的值分别设置为10和20。

然后,我们使用cmp指令比较var1var2的值。根据比较结果,jne指令会根据ZF位的值来决定是否跳转。如果var1不等于var2,即ZF为0,则跳转到not_equal标签处执行相应的代码块;如果var1等于var2,即ZF为1,则继续执行下面的指令。

最后,我们使用系统调用int 0x80来结束程序。

通过使用jne指令,我们可以根据比较结果来进行条件判断和跳转,从而实现不同的代码逻辑分支。

cmpl 指令

cmpl指令是x86汇编语言中的一条比较指令,用于比较两个操作数的值。

cmpl指令的语法如下:

cmpl source, destination

其中,sourcedestination是要比较的操作数。

cmpl指令会将sourcedestination进行比较,并根据比较结果设置条件码寄存器的值。根据比较结果,条件码寄存器的ZF(零标志位)和SF(符号标志位)位会被更新。

下面是一个示例,展示了cmpl指令的使用:

section .datavar1 dw 10var2 dw 20section .textglobal _start_start:mov ax, [var1]mov bx, [var2]cmpl ax, bx; 根据比较结果设置的条件码寄存器的值,执行不同的跳转指令je equaljg greaterjl less; 继续执行下面的指令; ...equal:; 如果var1等于var2,则跳转到equal标签处执行相应的代码块; ...; 继续执行下面的指令; ...greater:; 如果var1大于var2,则跳转到greater标签处执行相应的代码块; ...; 继续执行下面的指令; ...less:; 如果var1小于var2,则跳转到less标签处执行相应的代码块; ...; 继续执行下面的指令; ...end:; 结束程序mov eax, 1int 0x80

在上面的示例中,我们定义了两个变量var1var2,并将它们的值分别设置为10和20。

然后,我们使用mov指令将var1var2的值分别加载到寄存器axbx中。

接下来,我们使用cmpl指令比较axbx的值。根据比较结果,条件码寄存器的ZFSF位会被更新。

根据条件码寄存器的值,我们可以使用条件跳转指令(如jejgjl等)来根据比较结果执行不同的代码逻辑分支。

通过使用cmpl指令,我们可以比较两个操作数的值,并根据比较结果来进行条件判断和跳转。

jbe指令

jbe指令是x86汇编语言中的一条条件跳转指令,用于在无符号数小于或等于的情况下进行跳转。

jbe指令的语法如下:

jbe label

其中,label是一个标签,用于指定跳转的目标位置。

jbe指令根据条件码寄存器的值来进行跳转。如果CF为1或者ZF为1,则跳转到label指定的位置。条件码寄存器的CF位表示进位标志位,当无符号数比较时,如果发生了进位,则CF被设置为1。ZF位表示零标志位,当上一条指令的结果为零时,ZF被设置为1。

下面是一个示例,展示了jbe指令的使用:

section .datavar1 dw 10var2 dw 20section .textglobal _start_start:mov ax, [var1]mov bx, [var2]cmp ax, bxjbe less_or_equal; 如果var1大于var2,则继续执行下面的指令; ...less_or_equal:; 如果var1小于或等于var2,则跳转到less_or_equal标签处执行相应的代码块; ...; 继续执行下面的指令; ...end:; 结束程序mov eax, 1int 0x80

在上面的示例中,我们定义了两个变量var1var2,并将它们的值分别设置为10和20。

然后,我们使用cmp指令比较var1var2的值。根据比较结果,jbe指令会根据CFZF位的值来决定是否跳转。如果var1小于或等于var2,即CF为1或者ZF为1,则跳转到less_or_equal标签处执行相应的代码块;如果var1大于var2,即CF为0且ZF为0,则继续执行下面的指令。

最后,我们使用系统调用int 0x80来结束程序。

通过使用jbe指令,我们可以根据无符号数的比较结果来进行条件判断和跳转,从而实现不同的代码逻辑分支。

cmpq 指令

在这里插入图片描述

jx 指令

在这里插入图片描述

shr指令

SHR 是汇编语言中的一个指令,用于将一个数值向右移动指定的位数。SHR 是 “Shift Right” 的缩写。它是一种逻辑右移指令,表示将操作数的二进制位向右移动,并用零填充左侧空出的位。

SHR 指令的语法和操作数取决于所使用的汇编语言和体系结构。下面是一个通用的示例:

SHR destination, count
  • destination:目标操作数,表示要进行右移操作的值。可以是寄存器、内存位置或立即数。
  • count:右移的位数。可以是一个立即数或者由寄存器或内存位置提供的数值。

SHR 指令将目标操作数的二进制位向右移动指定的位数。移动后,右侧的位将被丢弃,左侧空出的位将用零填充。移动的位数由 count 指定。

以下是一个示例,展示了如何使用 SHR 指令将寄存器 AL 的值向右移动 1 位:

MOV AL, 0b11001100 ; AL = 0xCC
SHR AL, 1         ; 将 AL 的值向右移动 1 位; 移动后,AL = 0x66

在上述示例中,AL 寄存器的初始值为 0xCC,即二进制 11001100。通过执行 SHR AL, 1 指令,将 AL 的值向右移动 1 位。移动后,AL 的值变为 0x66,即二进制 01100110

SHR 指令在汇编语言中常用于对数据进行位操作,例如将无符号整数除以 2 的幂次方、提取二进制数的低位等。具体使用时,需要根据具体的需求和上下文进行相应的操作和处理。

sar指令

SAR 是汇编语言中的一个指令,用于将一个数值向右算术移动指定的位数。SAR 是 “Shift Arithmetic Right” 的缩写。它是一种算术右移指令,表示将操作数的二进制位向右移动,并根据符号位进行填充。

SAR 指令的语法和操作数取决于所使用的汇编语言和体系结构。下面是一个通用的示例:

SAR destination, count
  • destination:目标操作数,表示要进行右移操作的值。可以是寄存器、内存位置或立即数。
  • count:右移的位数。可以是一个立即数或者由寄存器或内存位置提供的数值。

SAR 指令将目标操作数的二进制位向右移动指定的位数,并根据符号位进行填充。移动后,右侧的位将被丢弃,左侧空出的位将用符号位进行填充。

以下是一个示例,展示了如何使用 SAR 指令将寄存器 AL 的值向右移动 1 位:

MOV AL, 0b11001100 ; AL = 0xCC
SAR AL, 1         ; 将 AL 的值向右移动 1 位; 移动后,AL = 0xE6

在上述示例中,AL 寄存器的初始值为 0xCC,即二进制 11001100。通过执行 SAR AL, 1 指令,将 AL 的值向右移动 1 位。移动后,AL 的值变为 0xE6,即二进制 11100110

SAR 指令在汇编语言中常用于对带符号整数进行位操作,例如将带符号整数除以 2 的幂次方、进行有符号数的扩展等。具体使用时,需要根据具体的需求和上下文进行相应的操作和处理

test指令

在这里插入图片描述

参考链接

https://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/lectures/06-machine-control.pdf
https://zhuanlan.zhihu.com/p/106316877

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

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

相关文章

【SpringSecurity】简介

SpringSecurity简介 Spring Security 的前身是Acegi Security,在被收纳为Spring 子项目后正式更名为Spring Security。Spring Security目前已经到了6.x,并且加入了原生OAuth2.0框架,支持更加现代化的密码加密方式。可以预见,在Ja…

翻页电子杂志制作功略,快收藏,保管好用!

翻页电子杂志,我相信这对大家很熟悉吧,大家也都经常看电子杂志吧。它和我们的生活紧密相关,也极大地改变了我们的阅读方式。听到这“翻页电子杂志”,是不是觉得制作起来肯定很难很复杂,需要专业的人才能制作呢&#xf…

第 370 周赛 100112. 平衡子序列的最大和(困难,离散化,权值树状数组)

太难了,看答案理解了半天 题目的要求可以理解为 nums[ij] - ij > nums[ii] - ii ,所以问题化为求序列 bi nums[i] - i 的非递减子序列的最大元素和需要前置知识,离散化,树状数组离散化:将分布大却数量少(即稀疏)的…

0X02

web9 阐释一波密码&#xff0c;依然没有什么 发现&#xff0c;要不扫一下&#xff0c;或者看一看可不可以去爆破密码 就先扫了看看&#xff0c;发现robots.txt 访问看看,出现不允许被访问的目录 还是继续尝试访问看看 就可以下载源码&#xff0c;看看源码 <?php $fl…

旅游业为什么要选择VR全景,VR全景在景区旅游上有哪些应用

引言&#xff1a; VR全景技术的引入为旅游业带来了一场变革。这项先进技术不仅提供了前所未有的互动体验&#xff0c;还为景区旅游文化注入了新的生机。 一&#xff0e;VR全景技术&#xff1a;革新旅游体验 1.什么是VR全景技术&#xff1f; VR全景技术是一种虚拟现实技术&am…

第12章_MySQL数据类型精讲

文章目录 1 MySQL中的数据类型2 整数类型2.1 类型介绍2.2 可选属性2.2.1 M2.2.2 UNSIGNED2.2.3 ZEROFILL 2.3 适用场景2.4 如何选择演示代码 3 浮点类型3.1 类型介绍 本章的内容测试建议使用 MySQL5.7进行测试。3.2 数据精度说明3.3 精度误差说明 4 定点数类型4.1 类型介绍4.2 …

ZZ038 物联网应用与服务赛题第D套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 (D卷) 赛位号:______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等; 2.竞赛任务中所使用的各类软件工具、软件安装文件等,都…

1、Flink基础概念

1、基础知识 &#xff08;1&#xff09;、数据流上的有状态计算 &#xff08;2&#xff09;、框架和分布式处理引擎&#xff0c;用于对无界和有界数据流进行有状态计算。 &#xff08;3&#xff09;、事件驱动型应用&#xff0c;有数据流就进行处理&#xff0c;无数据流就不…

Android MVI架构的深入解析与对比

什么是MVI&#xff1f; M&#xff1a;model&#xff0c;此处的model并不是传统的数据模块&#xff0c;它是指用来存储视图状态UI State的一个模块 。比如请求数据时的loading、请求失败的提示页面等UI层面的变化状态。 V&#xff1a;view&#xff0c;视图模块 I&#xff1a;…

MongoDB设置密码

关于为什么要设置密码 公司的测试服务器MongoDB服务对外网开放的&#xff0c;结果这几天发现数据库被每天晚上被人清空的了&#xff0c;还新建了个数据库&#xff0c;说是要支付比特币。查了日志看到有个境外的IP登录且删除了所有的集合。所以为了安全起见&#xff0c;我们给m…

【JVM系列】- 挖掘·JVM堆内存结构

挖掘JVM堆内存结构 文章目录 挖掘JVM堆内存结构堆的核心概念堆的特点 堆的内存结构内存划分新生代/新生区&#xff08;Young Generation&#xff09;老年代&#xff08;Tenured Generation&#xff09;永久代&#xff08;或元数据区&#xff09;&#xff08;PermGen 或 MetaSpa…

【蓝桥杯 第十四届省赛Java B组】真题训练(A - C)正在更新

目录 A、阶乘求和 - BigInteger B、幸运数字 - 字符串 进制转换 暴力大法 C、数组分割 - A、阶乘求和 - BigInteger 思路&#xff1a; 当时比赛时&#xff0c;拿计算器算的&#xff0c;然后辛辛苦苦也没对 看到这个数肯定很大&#xff0c;而且只求后9位&#xff0c;阶乘越…