CSAPP BOMB LAB part3

news2024/11/26 2:50:38

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 .data
    var1 dw 10
    var2 dw 20

section .text
    global _start

_start:
    mov ax, [var1]
    mov bx, [var2]

    cmp ax, bx
    jne not_equal

    ; 如果var1等于var2,则继续执行下面的指令
    ; ...

not_equal:
    ; 如果var1不等于var2,则跳转到not_equal标签处执行相应的代码块
    ; ...

    ; 继续执行下面的指令
    ; ...

end:
    ; 结束程序
    mov eax, 1
    int 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 .data
    var1 dw 10
    var2 dw 20

section .text
    global _start

_start:
    mov ax, [var1]
    mov bx, [var2]

    cmpl ax, bx

    ; 根据比较结果设置的条件码寄存器的值,执行不同的跳转指令
    je equal
    jg greater
    jl less

    ; 继续执行下面的指令
    ; ...

equal:
    ; 如果var1等于var2,则跳转到equal标签处执行相应的代码块
    ; ...

    ; 继续执行下面的指令
    ; ...

greater:
    ; 如果var1大于var2,则跳转到greater标签处执行相应的代码块
    ; ...

    ; 继续执行下面的指令
    ; ...

less:
    ; 如果var1小于var2,则跳转到less标签处执行相应的代码块
    ; ...

    ; 继续执行下面的指令
    ; ...

end:
    ; 结束程序
    mov eax, 1
    int 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 .data
    var1 dw 10
    var2 dw 20

section .text
    global _start

_start:
    mov ax, [var1]
    mov bx, [var2]

    cmp ax, bx
    jbe less_or_equal

    ; 如果var1大于var2,则继续执行下面的指令
    ; ...

less_or_equal:
    ; 如果var1小于或等于var2,则跳转到less_or_equal标签处执行相应的代码块
    ; ...

    ; 继续执行下面的指令
    ; ...

end:
    ; 结束程序
    mov eax, 1
    int 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.coloradmin.cn/o/1173470.html

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

相关文章

AI 绘画 | Stable Diffusion 提示词

Prompts提示词简介 在Stable Diffusion中,Prompts是控制模型生成图像的关键输入参数。它们是一种文本提示,告诉模型应该生成什么样的图像。 Prompts可以是任何文本输入,包括描述图像的文本,如“一只橘色的短毛猫,坐在…

【4步精确手册】帮助你快速掌握国外纳斯达克大屏营销推广!

纳斯达克(Nasdaq)是美国著名的证交所之一,它是以高科技企业的上市闻名世界。纳斯达克大屏营销推广指的是在纳斯达克交易中心大型屏上展现广告、宣传信息的一种营销推广方式。下面我们就为大家介绍一下如何用四个简易流程把握国外纳斯达克大屏…

怎么在markdown中设置字体颜色为红色

2023年11月5日,周日上午 除了使用HTML标签,Markdown还提供了一种更简洁的方式来设置文本样式,包括颜色。 所有,可以使用Markdown的扩展语法来实现。 具体来说,可以使用以下语法来输出红色字体的字: 这是…

【JavaSE语法】类和对象(一)

一、面向对象的初步认知 1.1 什么是面向对象 Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情 …

心理咨询服务预约小程序的效果如何

心理咨询机构很多,随着人们生活压力提升及生活多样化,部分人群在心理方面可能会面对各种不适,因此寻找心理咨询机构成为优先选项。 对商家来说,市场中拥有很多需求客户,且具备跨区域服务性,传统线下引流拓…

一文读懂ARM安全性架构和可信系统构建要素

一文读懂ARM安全性架构和可信系统构建要素 所谓可信系统(trusted system),即能够用于保护密码和加密密钥等资产(assets)免受一系列的可信攻击,防止其被复制、损坏或不可用(unavailable&#xf…

宠物医院服务预约小程序的效果如何

随着养宠家庭增多及对爱宠的照顾加深,除了食品、服饰外,宠物医院近些年也迎来了较高发展,部分城市甚至聚集着众多品牌,以单店或多店品牌的方式拓展市场。 对宠物医院来说,一般都是拓展同市客户,或者多门店…

【漏洞复现】​金蝶云星空管理中心

目录 0x01 漏洞介绍 0x02 影响产品 0x03 语法特征 0x04 漏洞复现 0x01 漏洞介绍 金蝶云星空是一款基于领先的可组装低代码PaaS平台,全面服务客户研发、生产、营销、供应链、财务等领域转型的企业管理服务平台。它已支持IPD、精益、阿米巴等先进管理理念在3.1万余…

【MongoDB】集群搭建实战 | 副本集 Replica-Set | 分片集群 Shard-Cluster | 安全认证

文章目录 MongoDB 集群架构副本集主节点选举原则搭建副本集主节点从节点仲裁节点 连接节点添加副本从节点添加仲裁者节点删除节点 副本集读写操作副本集中的方法 分片集群分片集群架构目标第一个副本集第二个副本集配置集初始化副本集路由集添加分片开启分片集合分片删除分片 安…

[DC29 Quals] Reverse-Tiamat -wp

前言:我将尽量以自己做题时的思考过程来组织本文,所以本文可能不适合阅读,知识点也会比较散碎的出现。 ​1. qemu-user 简介 简单介绍一点本题所涉及的 qemu 相关知识,需要声明的是这一节不是对 qemu 的源码分析,仅仅…

【软件测试】Linux系统下搭建JDK+JMeter环境详细步骤,一篇概全...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Linux搭建JDK环境…

王道p18 07.将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。(c语言代码实现)

视频讲解在这:👇 p18 第7题 c语言代码实现王道数据结构课后代码题_哔哩哔哩_bilibili 本题代码如下 int merge(struct sqlist* A, struct sqlist* B, struct sqlist* C) {if (A->length B->length > C->length)//大于顺序表的最大长度r…

NewStarCTF 2023 公开赛道 Web

NewStarCTF 2023 公开赛道 Web WEEK1|WEB 泄漏的秘密 泄露的秘密,直接看常见的目录robots.txt,www.zip直接那道两段flag 也可以用dirsearch工具扫描,但是BUUOJ平台的网站只能开底线程,不然全是429 PART ONE: flag{r0bots_1s_s0_us3ful $…

宝塔面板使用Supervisor进程守护插件,配置守护Mysql的操作教程。

本篇文章主要讲解,在宝塔面板中使用Supervisor进程守护插件,配置守护Mysql的操作教程。 作者:任聪聪 日期:2023年11月5日 一、安装守护进程插件 安装插件一、进程守护插件 安装说明:在软件商店中搜索“进程守护”&am…

Leetcode-1 两数之和

暴力穷举 class Solution {public int[] twoSum(int[] nums, int target) {int[] num new int[2];for(int i0;i<nums.length-1;i){for(int ji1;j<nums.length;j){if(nums[i]nums[j]target){num[0]i;num[1]j;}}}return num;} }HashMap&#xff0c;记录下标和对应值&…

【漏洞复现】weblogic-10.3.6-‘wls-wsat‘-XMLDecoder反序列化(CVE-2017-10271)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描nacsweblogicScanner3、漏洞验证 说明内容漏洞编号CVE-2017-10271漏洞名称Weblogic < 10.3.…

Qt::WindowFlags

Qt::WindowFlags 文章目录 Qt::WindowFlags摘要窗口&部件Qt::WindowFlags&WindowType窗口类型窗口提示 关键字&#xff1a; Qt、 Qt::WindowFlags、 Qt::WindowType、 关键字4、 关键字5 摘要 今天在公司解决自己的Bugs的时候&#xff0c;发现一个以前可以用的功…

MSF暴力破解SID和检测Oracle漏洞

暴力破解SID 当我们发现 Oracle 数据库的 1521 端口时,我们可能考虑使用爆破 SID(System Identifier)来进行进一步的探测和认证。在 Oracle 中,SID 是一个数据库的唯一标识符。当用户希望远程连接 Oracle 数据库时,需要了解以下几个要素:SID、用户名、密码以及服务器的 I…

antv/g6之交互模式mode

什么是mode 在 AntV G6 中&#xff0c;“mode” 是用于配置图表交互模式的一种属性。通过设置 “mode”&#xff0c;可以控制图表的行为&#xff0c;以满足不同的交互需求。可能在不同的场景需要展现的交互行为不一样。比如查看模式下点击一个点就选中的状态&#xff0c;在编辑…

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

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;J卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等&#xff1b; 2.竞赛任务中所使用…