CSAPP BOMB LAB

BOMB LAB

lab phase1

bomb.c phase1 code:
bomb.c phase1 code
bomb.s phase1 code:
bomb.s phase1 code
401338 对应 string_not_equal函数:
在这里插入图片描述

工具介绍

objdump 使用

objdump是一个用于分析可执行文件、目标文件和共享库的工具。它可以显示这些文件的二进制指令、符号表、段信息、重定位表等内容,帮助开发者了解和调试程序。

objdump的常用选项和用法如下:

  1. 显示二进制指令:objdump -d <file>,这会以汇编代码的形式显示可执行文件或目标文件的二进制指令。

  2. 显示符号表:objdump -t <file>,这会显示可执行文件或目标文件的符号表,包括函数名、变量名等信息。

  3. 显示段信息:objdump -h <file>,这会显示可执行文件或目标文件的段信息,包括段名、段地址、段大小等。

  4. 显示重定位表:objdump -r <file>,这会显示可执行文件或目标文件的重定位表,用于动态链接和地址重定位。

  5. 显示动态符号表:objdump -T <file>,这会显示可执行文件或共享库的动态符号表,包括动态链接的函数和变量。

  6. 反汇编指定函数:objdump -d <file> -j <section>,这会反汇编指定节(section)的内容,可以用于分析特定函数的汇编代码。

除了上述常用选项,objdump还提供了许多其他选项,可以根据需要进行使用。可以通过 objdump --help 命令查看完整的选项列表和使用说明。

请注意,objdump是一个命令行工具,可以在Linux、Unix和类似系统中使用。在Windows系统上,可以使用MinGW或Cygwin等工具来使用objdump。

在这里插入图片描述

汇编语法

sub 指令

在汇编语言中,SUB(Subtract)指令用于执行两个操作数的减法运算,并将结果存储到目标操作数中。SUB指令有多种形式,可以用于不同的数据类型和寻址方式。

以下是x86汇编语言中SUB指令的一些常见形式:

  1. SUB reg, reg/mem:执行两个寄存器或内存位置的减法操作,并将结果存储到第一个操作数中。例如,SUB EAX, EBX 将EBX的值从EAX中减去,并将结果存储回EAX寄存器。

  2. SUB reg, imm:执行寄存器和立即数之间的减法操作,并将结果存储到寄存器中。例如,SUB EAX, 10 将EAX寄存器的值减去10,并将结果存储回EAX寄存器。

  3. SUB mem, reg/imm:执行内存位置和寄存器或立即数之间的减法操作,并将结果存储到内存位置中。例如,SUB [EBX], ECX 将ECX寄存器的值从EBX指向的内存位置中减去,并将结果存储回该内存位置。

SUB指令的结果影响标志位寄存器(Flags Register),可以通过检查这些标志位来判断减法操作的结果。例如,ZF(Zero Flag)被设置为1表示结果为零,SF(Sign Flag)被设置为1表示结果为负数。

需要注意的是,SUB指令会修改操作数的值,因此在使用之前需要确保操作数的值是正确的,并且结果不会溢出。

mov指令

在汇编语言中,MOV(Move)指令用于将数据从一个位置复制到另一个位置。它是汇编语言中最常用的指令之一,用于数据的加载、存储和传递。

MOV指令有多种形式,可以用于不同的数据类型和寻址方式。以下是x86汇编语言中MOV指令的一些常见形式:

  1. MOV reg, reg/mem:将一个寄存器或内存位置的值复制到另一个寄存器中。例如,MOV EAX, EBX 将EBX寄存器的值复制到EAX寄存器中。

  2. MOV reg, imm:将一个立即数(常数)复制到寄存器中。例如,MOV EAX, 10 将值10复制到EAX寄存器中。

  3. MOV mem, reg/imm:将一个寄存器或立即数的值复制到内存位置中。例如,MOV [EBX], ECX 将ECX寄存器的值复制到EBX指向的内存位置中。

MOV指令可以用于不同的寻址方式,如直接寻址、间接寻址、基址加变址寻址等。它允许在寄存器和内存之间进行数据传输,以及在寄存器之间进行数据交换。

需要注意的是,MOV指令只能将数据从源位置复制到目标位置,而不能进行数学运算。如果需要进行数学运算,需要使用其他指令,如ADD(加法)、SUB(减法)等。

MOV指令的执行速度非常快,因为它是在寄存器之间直接进行数据传输,而不涉及内存访问。因此,在性能要求较高的场景中,使用MOV指令可以提高程序的执行效率。

movq 指令

movq指令:
在这里插入图片描述
movq 参数
在这里插入图片描述
movq 参数介绍
在这里插入图片描述

地址格式:
在这里插入图片描述

call 指令

在这里插入图片描述

callq 指令

callq 指令例子:
在这里插入图片描述

leaq 指令

在这里插入图片描述

cmpq 指令

在这里插入图片描述

testq 指令

在这里插入图片描述

pushq 指令

在这里插入图片描述

popq 指令

在这里插入图片描述

关于指令的思考

call 和 callq的区别

在汇编语言中,CALL和CALLQ是两种不同的指令,它们在不同的体系结构中使用。

  1. CALL指令:
    CALL指令是在x86体系结构中使用的指令。它用于调用(跳转到)一个子程序或函数。CALL指令的操作数可以是一个标签、一个寄存器或一个内存地址。

当执行CALL指令时,会将当前指令的下一条指令的地址(即CALL指令的下一条指令)压入栈中,然后跳转到操作数所指定的子程序或函数的起始地址。

  1. CALLQ指令:
    CALLQ指令是在x86-64体系结构中使用的指令。它与CALL指令的功能相同,都是用于调用(跳转到)一个子程序或函数。但是,CALLQ指令是64位模式下的指令,用于支持更大的地址空间。

CALLQ指令的操作数可以是一个标签、一个寄存器或一个内存地址。它与CALL指令的区别在于,CALLQ指令使用64位的地址寻址方式,可以访问更大的内存空间。

总结:
CALL指令是在32位x86体系结构中使用的指令,而CALLQ指令是在64位x86-64体系结构中使用的指令。它们的功能相同,都用于调用(跳转到)一个子程序或函数,但是CALLQ指令适用于64位模式下的更大地址空间。

leaq和movq的区别

leaq指令和movq指令是x86汇编语言中常用的指令,用于处理数据的加载和传输。它们的区别如下:

  1. 功能:

    • leaq指令用于将一个内存地址或偏移量加载到寄存器中,而不是将内存中的值加载到寄存器。它主要用于计算地址,而不是数据传输。
    • movq指令用于将一个值从一个位置(寄存器、内存或立即数)复制到另一个位置(寄存器或内存)。
  2. 语法:

    • leaq指令的语法为leaq <源操作数>, <目的操作数>,其中源操作数是一个内存地址或偏移量,目的操作数是一个寄存器。
    • movq指令的语法为movq <源操作数>, <目的操作数>,其中源操作数和目的操作数可以是寄存器、内存位置或立即数。
  3. 执行时间:

    • leaq指令通常比movq指令更快,因为它只执行地址计算,而不涉及内存读取或写入操作。
  4. 使用场景:

    • leaq指令常用于计算数组元素的地址、计算偏移量、进行指针运算等需要计算地址的场景。
    • movq指令常用于数据传输、寄存器之间的值交换、常量加载等数据操作场景。

总之,leaq指令用于计算地址,而movq指令用于数据传输和复制。它们在功能、语法和使用场景上有明显的区别。

寄存器知识点

寄存器

x86 寄存器:
在这里插入图片描述

寄存器功能:
在这里插入图片描述
condition code:
在这里插入图片描述

memory 地址

地址模型

在这里插入图片描述

参考链接

https://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/lectures/05-machine-basics.pdf
https://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/lectures/06-machine-control.pdf
https://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/lectures/07-machine-procedures.pdf

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

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

相关文章

Mybatis-Plus 逻辑删除

目录 引言准备工作方式一&#xff1a;局部注解方式二&#xff1a;全局配置结语开源项目 引言 MyBatis-Plus&#xff0c;作为 MyBatis 的增强版本&#xff0c;提供了丰富的功能和选项&#xff0c;以简化数据库操作和提高开发效率。在众多功能中&#xff0c;逻辑删除是一个常见的…

C++的拷贝构造函数

目录 拷贝构造函数一、为什么用拷贝构造二、拷贝构造函数1、概念2、特征1. 拷贝构造函数是构造函数的一个重载形式。2. 拷贝构造函数的参数3. 若未显式定义&#xff0c;编译器会生成默认的拷贝构造函数。4. 拷贝构造函数典型调用场景 拷贝构造函数 一、为什么用拷贝构造 日期…

数据结构-二分查找Java实现

目录 一、引言二、算法步骤三、原理演示四、代码实战五、结论 一、引言 二分查找&#xff0c;也被称为二分搜索或折半查找&#xff0c;是一种用于在有序数组或列表中查找特定元素的高效算法。其基本思想是将查找范围逐步缩小&#xff0c;直到找到目标元素或确定目标元素不存在。…

分布式存储系统Ceph应用组件介绍

1、 无中心架构分布式存储Ceph Ceph是一套开源的分布式存储系统。具有可靠性高&#xff0c;性能优良&#xff0c;可伸缩&#xff0c;与HDFS不同的地方在于&#xff0c;该架构中没有中心节点。 Ceph优点在于它不单单是存储&#xff0c;同时还充分利用了存储节点上的计算能…

赛宁网安多领域创新成果亮相第五届“纵横”论坛

10月27日&#xff0c;第五届“纵横”网络空间安全创新论坛在安徽合肥举办&#xff0c;来自中央国家机关、地方政府、军队有关单位、高校、科研院所和部分高新技术企业的领导、专家和代表500余人参加。 本届论坛由军事科学院和国防科技大学等单位共同主办&#xff0c;国防科技大…

JavaScript开发技巧(上篇)

JavaScript开发技巧&#xff08;上篇&#xff09; 1、前言2、从数组中删除假值3、数组搜索4、空值合并运算符5、逻辑或赋值运算符6、多值匹配7、三元表达式8、短路评估9、科学计数法10、位运算符11、指数求幂 1、前言 JavaScript中有很多速记技巧&#xff0c;可以缩短代码长度…

【原创】java+swing+mysql个人理财管理系统设计与实现

摘要&#xff1a; 个人理财管理系统是一款帮助用户有效管理个人财务的软件&#xff0c;本文将详细介绍该系统的设计过程&#xff0c;包括功能模块、数据库设计、界面设计等&#xff0c;系统采用javaswingmysql技术组合。 功能分析&#xff1a; 系统主要提供给管理员、用户使…

金蝶云星空创建自动下推并保存公共服务

文章目录 金蝶云星空创建自动下推并保存公共服务创建公共方法按单下推数据按明细行下推数据调用下推操作 调用公共方法 金蝶云星空创建自动下推并保存公共服务 创建公共方法 按单下推数据 /// <summary>/// 获取单据转换数据包/// </summary>public DynamicObjec…

M3重磅来袭 苹果多款新品上架

10月31日早上8点&#xff0c;苹果举行了新品发布会&#xff0c;正式发布了M3、M3 Pro、 M3 Max芯片&#xff0c;以及基于新款芯片打造的14英寸和16英寸MacBook Pro、新款iMac。 我们现在花一分钟&#xff0c;简单了解一下这次的新品。 M3、M3 Pro、M3 Max M3系列芯片就是M2系…

关于测试组件junit切换testng的示例以及切换方式分享

文章目录 概要首先看看junit和testng的区别实践篇摸拟业务逻辑代码简单对象数据层摸拟类业务逻辑层摸拟类后台任务摸拟类 基于springmockjunit基于springmocktestng 示例的差异点junit与testng的主要变动不大,有以下几个点需要注意注解部分在before,after中testng多出按配置执行…

Spring 事务不生效的几种场景

Spring 事务不生效的几种场景 详细内容参考以下链接&#xff0c;这个链接是原文&#xff1a; spring 事务不生效的15中场景 非原创。 以下内容只是为了学习&#xff0c;加深印象&#xff0c;仅作为个人学习笔记&#xff0c; 请支持原创&#xff0c;内容请点击 spring 事务不生效…

链动2+1模式:白酒产品的营销新策略

链动21模式是一种创新的营销模式&#xff0c;结合白酒产品更能发挥其优势。该模式通过独特的身份晋升和奖励机制&#xff0c;快速建立销售渠道&#xff0c;提高用户粘性。 一、核心机制 身份晋升机制&#xff1a;用户购买指定499白酒产品后成为代理&#xff0c;再邀请两位用户…

新风机如何联动?

数据中心的运行会产生大量的热量&#xff0c;因为其中包含了大量的服务器、存储设备以及网络设备等&#xff0c;它们需要消耗大量的电力来进行计算和数据处理。为了保证这些设备运行的稳定性和性能&#xff0c;数据中心必须维持适宜的温度和湿度。 新风系统可以在数据中心中起到…

小米澎湃OS发布,雷军小米的“统一”大棋局

千呼万唤始出来。2023年10月26日&#xff0c;小米澎湃OS终于揭开面纱。 雷军在主题为“跨越时刻”的发布会上&#xff0c;正式发布了小米澎湃OS。面对这款历时七年打造的全新操作系统&#xff0c;雷军难掩兴奋&#xff0c;他感慨道&#xff1a;“我心澎湃”。 小米新操作系统取…

微信小程序项目案例之导游证考试刷题小程序

前言 很多计算机专业的同学在做毕设选题时不知道该如何选题&#xff0c;有的同学是已经选择了要开发一款小程序&#xff0c;但是又不知道开发哪类小程序。本篇将为大家介绍一个小程序的开发方向&#xff0c;考试刷题类小程序是目前比较火的小程序项目之一&#xff0c;在小程序…

CB2-2CARD的openSUSE远程SSH登录提示优化

CB2-2CARD的openSUSE远程SSH登录提示优化 1. 源由2. 优化内容2.1 去掉Password/banner前后的prompts提示语句2.2 增加logo登录界面2.3 增加系统运行情况简单汇报2.4 增加banner 3. 优化效果 1. 源由 之前运行的CB2-2CARD的openSUSE安装&NAS环境配置服务器已经运行也有段时…

(c语言进阶)字符串函数、字符分类函数和字符转换函数

一.求字符串长度 1.strlen() (1)基本概念 头文件&#xff1a;<string.h> (2)易错点&#xff1a;strlen()的返回值为无符号整形 #include<stdio.h> #include<string.h> int main() {const char* str1 "abcdef";const char* str2 "bbb&q…

审核 Microsoft SQL Server 日志

手动审核数据库活动是一项艰巨的任务&#xff0c;有效完成审计的最佳方法是使用简化和自动化数据库监控的综合解决方案&#xff0c;该解决方案还应使数据库管理员能够监控、跟踪和即时识别任何操作问题的根本原因&#xff0c;并实时检测对机密数据的未经授权的访问。 什么是 S…

前端面试 面试多起来了

就在昨天 10.17 号,同时收到了三个同学面试的消息。他们的基本情况都是双非院校本科、没有实习经历、不会消息中间件和 Spring Cloud 微服务,做的都是单体项目。但他们投递简历还算积极,从今年 9 月初就开始投递简历了,到现在也有一个多月了。 来看看,这些消息。 为…

找到Linux中最大的目录和文件

寻找下一层最大的文件夹 du -h --max-depth1Linux上查找最大文件的3种方法 第一种&#xff1a;ls 最简单的方法就是借助 ls 命令&#xff0c;因为 ls 命令本身输出是带文件大小信息的。 比如&#xff0c;我要列出 /data/log/ 目录中的20个最大文件&#xff0c;可以&#xf…