逆向学习汇编篇:算术运算与逻辑运算

本节课在线学习视频(网盘地址,保存后即可免费观看):

​​https://pan.quark.cn/s/ca06a120054e​​

在逆向工程中,理解汇编语言中的算术运算和逻辑运算是至关重要的。这些运算不仅构成了程序逻辑的基础,也是分析和修改程序行为的关键。本文将深入探讨这些运算,并通过几个代码案例来加深理解。

算术运算

算术运算包括加法、减法、乘法和除法等。在汇编语言中,这些运算通常涉及寄存器和内存操作数。

加法和减法

加法和减法是最基本的算术运算。在x86架构中,​​ADD​​和​​SUB​​指令用于执行这些操作。

代码案例:加法
section .data
    num1 db 5
    num2 db 3

section .text
    global _start
_start:
    mov al, [num1] ; 将num1的值加载到AL寄存器
    add al, [num2] ; AL寄存器中的值加上num2的值
    ; 现在AL寄存器中的值为8

在这个例子中,我们使用​​ADD​​指令将​​num1​​和​​num2​​的值相加,并将结果存储在​​AL​​寄存器中。

代码案例:减法
section .data
    num1 db 10
    num2 db 4

section .text
    global _start
_start:
    mov al, [num1] ; 将num1的值加载到AL寄存器
    sub al, [num2] ; AL寄存器中的值减去num2的值
    ; 现在AL寄存器中的值为6

在这个例子中,我们使用​​SUB​​指令将​​num1​​的值减去​​num2​​的值,并将结果存储在​​AL​​寄存器中。

乘法和除法

乘法和除法在汇编中稍微复杂一些。​​MUL​​和​​DIV​​指令用于执行无符号乘法和除法。

代码案例:乘法
section .data
    num1 db 2
    num2 db 3

section .text
    global _start
_start:
    mov al, [num1] ; 将num1的值加载到AL寄存器
    mul byte [num2] ; AL寄存器中的值乘以num2的值,结果在AX中
    ; 现在AX寄存器中的值为6

在这个例子中,我们使用​​MUL​​指令将​​num1​​和​​num2​​的值相乘,并将结果存储在​​AX​​寄存器中。

代码案例:除法
section .data
    num1 db 10
    num2 db 2

section .text
    global _start
_start:
    mov ax, 0x000A ; 将num1的值加载到AX寄存器
    div byte [num2] ; AX寄存器中的值除以num2的值,商在AL中,余数在AH中
    ; 现在AL寄存器中的值为5,AH中的值为0

在这个例子中,我们使用​​DIV​​指令将​​num1​​的值除以​​num2​​的值,并将商和余数分别存储在​​AL​​和​​AH​​寄存器中。

逻辑运算

逻辑运算包括与(AND)、或(OR)、非(NOT)和异或(XOR)等。这些运算通常用于位操作和条件判断。

代码案例:逻辑与

section .data
    num1 db 0b1100
    num2 db 0b1010

section .text
    global _start
_start:
    mov al, [num1] ; 将num1的值加载到AL寄存器
    and al, [num2] ; AL寄存器中的值与num2的值进行逻辑与运算
    ; 现在AL寄存器中的值为0b1000

在这个例子中,我们使用​​AND​​指令将​​num1​​和​​num2​​的值进行逻辑与运算,并将结果存储在​​AL​​寄存器中。

代码案例:逻辑或

section .data
    num1 db 0b1100
    num2 db 0b1010

section .text
    global _start
_start:
    mov al, [num1] ; 将num1的值加载到AL寄存器
    or al, [num2] ; AL寄存器中的值与num2的值进行逻辑或运算
    ; 现在AL寄存器中的值为0b1110

在这个例子中,我们使用​​OR​​指令将​​num1​​和​​num2​​的值进行逻辑或运算,并将结果存储在​​AL​​寄存器中。

代码案例:逻辑异或

section .data
    num1 db 0b1100
    num2 db 0b1010

section .text
    global _start
_start:
    mov al, [num1] ; 将num1的值加载到AL寄存器
    xor al, [num2] ; AL寄存器中的值与num2的值进行逻辑异或运算
    ; 现在AL寄存器中的值为0b0110

在这个例子中,我们使用​​XOR​​指令将​​num1​​和​​num2​​的值进行逻辑异或运算,并将结果存储在​​AL​​寄存器中。

结论

算术运算和逻辑运算是汇编语言中的基础操作,它们构成了程序逻辑的核心。通过上述案例,我们可以看到不同的汇编指令如何实现这些运算。掌握这些知识将有助于我们更深入地分析和理解程序的行为,以及在逆向工程中进行有效的代码分析和修改。在实际的逆向工程中,这些知识可以帮助我们跟踪数据流,分析程序逻辑,甚至修改程序行为。因此,深入学习这些基础知识对于任何希望在逆向工程领域有所建树的人来说都是必不可少的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化期末考试(编程)

1.KNN 1.新增数据的分类 import pandas as pd # 您的原始数据字典 data { 电影名称: [电影1, 电影2, 电影3, 电影4, 电影5], 打斗镜头: [10, 5, 108, 115, 20], 接吻镜头: [110, 89, 5, 8, 200], 电影类型: [爱情片, 爱情片, 动作片, 动作片, 爱情片] } …

昇思25天学习打卡营第8天 | 模型的保存与加载

内容介绍:在训练网络模型的过程中,实际上我们希望保存中间和最后的结果,用于微调(fine-tune)和后续的模型推理与部署,本章节我们将介绍如何保存与加载模型。 具体内容: 1. 导包 import numpy…

1.1 MySQL用户管理

1.1.1 用户的定义 用户名主机域 mysql> select user,host,password from mysql.user; --------------------------------------------------------------- | user | host | password | -----------------------------------------…

el-form重置后input无法输入问题

新增用户遇到的问题: 如果你没有为 formData 设置默认值,而只是将其初始化为空对象 {},则在打开dialog时,正常输入, formdata会变成如下 但是,打开后,直接使用 resetFields 或直接清空表单&…

LLDB 详解

LLDB 详解 LLDB 详解编译器集成优势LLDB 的主要功能命令格式原始(raw)命令选项终止符: -- LLDB 中的变量唯一匹配原则helpexpressionprint、call、po控制流程:continue、next、step、finishregister read / writethread backtracethread retu…

基于weixin小程序新生报到系统的设计

管理员账户功能包括:系统首页,个人中心,学生管理,班级信息管理,师资力量管理,宿舍信息管理,宿舍安排管理,签到信息管理,论坛管理 小程序功能包括:系统首页&am…

考研数学一有多难?130+背后的残酷真相

考研数学一很难 大家平时在网上上看到很多人说自己考了130,其实这些人只占参加考研数学人数的极少部分,有个数据可以展示出来考研数学到底有多难: 在几百万考研大军中,能考到120分以上的考生只有2%。绝大多数人的分数集中在30到…

【MySQL进阶之路 | 高级篇】MySQL8.0索引新特性->降序索引与隐藏索引

1. 支持降序索引 降序索引以降序存储键值.虽然在语法上,从MySQL4版本已经支持降序索引的语法了,但实际上该DESC定义是被忽略的.知道MySQL8.x版本才开始真正支持降序索引.(仅限于InnoDB存储引擎). MySQL在8.0版本前创建的仍然是升序索引,使用…

【C++11(二)】lambda表达式和可变参数模板

一、可变参数模板 C11的新特性可变参数模板 能够让您创建可以接受 可变参数的函数模板和类模板 // Args是一个模板参数包&#xff0c;args是一个函数形参参数包 // 声明一个参数包Args...args&#xff0c;这个参数包中可以包含0到任意个模板参数。 template <class ...Arg…

vue3 使用JsMind的方法,以及引入提示报错,无法找到模块“jsmind”的声明文件

最终结果&#xff1a; 一、使用&#xff1a;使用yarn或者npm 安装 yarn add jsmind npm install vue-jsmind 二、引入 两种方法&#xff1a;&#xff08;如果这样引入没问题按照这样引入&#xff09; import "jsmind/style/jsmind.css"; import JsMind from &quo…

【SSM】医疗健康平台-用户端-体检预约

知识目标 了解FreeMarker&#xff0c;能够简述FreeMarker的作用和生成文件的原理 熟悉FreeMarker的常用指令&#xff0c;能够在FTL标签中正确使用assign指令、include指令、if指令和list指令 掌握显示套餐列表功能的实现 掌握显示套餐详情功能的实现 掌握体检预约功能的实现…

nodejs——ejs模版遇到原型链污染产生rce

[GYCTF2020]Ez_Express 打开是一个登陆框 在源代码中找到 在代码里找到敏感关键字 找到merge 想到原型链污染 这里登陆只能用ADMIN才能登陆成功 但是这里index.php又设置了一个waf ban了admin的大小写 这里需要绕过这个waf 看注册这段代码 用的是这个toUpperCase()函数 之前…

【深度强化学习】如何使用多进程(multiprocessing、pipe)来加速训练

文章目录 实验结果实现思路思路1思路2 进程与线程介绍如何实现multiprocessing、Pipe的范例关于时间对比上的问题代码修改收敛为何不稳定 技巧进程资源抢占问题线程问题cpu和gpu问题 进阶&#xff08;还没看懂/还没实验&#xff09;附代码raw代码mul代码 实验结果 实验平台&am…

natsort 自然排序

1、安装 pip install natsort 2、为什么使用natsort 而不是sorted 在python中只需要调用sorted函数就可以了&#xff0c;但是这个函数有一个缺点&#xff0c;就是它是按照从第一位开始的顺序排列的。意思是&#xff1a; wav_file [1.wav, 13.wav, 9.wav, 2.wav,"23.wav…

Golang | Leetcode Golang题解之第198题打家劫舍

题目&#xff1a; 题解&#xff1a; func rob(nums []int) int {if len(nums) 0 {return 0}if len(nums) 1 {return nums[0]}first : nums[0]second : max(nums[0], nums[1])for i : 2; i < len(nums); i {first, second second, max(first nums[i], second)}return se…

图形编辑器基于Paper.js教程04: Paper.js中的基础知识

背景 了解paper.js的基础知识&#xff0c;在往后的开发过程中会让你如履平地。 基础知识 paper.js 提供了两种编写方式&#xff0c;一种是纯粹的JavaScript编写&#xff0c;还有一种是使用官方提供的PaperScript。 区别就是在于&#xff0c;调用paper下的字对象是否需要加pa…

Linux核心基础详解(第13天)

系列文章目录 一、Linux基础详解&#xff0c; 二、网编三要素和SSH原理 三、shell编程&#xff08;补充&#xff09; 文章目录 系列文章目录前言一、linux简介二、虚拟机简介1、设置VMware网卡1.1 修改VMware中网络1.2 修改本地net8网卡ip 2、安装命令版裸机3、安装centos操作…

Elasticsearch:使用 Llamaindex 的 RAG 与 Elastic 和 Llama3

这篇文章是对之前的文章 “使用 Llama 3 开源和 Elastic 构建 RAG” 的一个补充。我们可以在本地部署 Elasticsearch&#xff0c;并进行展示。我们将一步一步地来进行配置并展示。你还可以参考我之前的另外一篇文章 “Elasticsearch&#xff1a;使用在本地计算机上运行的 LLM 以…

【MySQL】 -- 事务

如果对表中的数据进行CRUD操作时&#xff0c;不加控制&#xff0c;会带来一些问题。 比如下面这种场景&#xff1a; 有一个tickets表&#xff0c;这个数据库被两个客户端机器A和B用时连接对此表进行操作。客户端A检查tickets表中还有一张票的时候&#xff0c;将票出售了&#x…

DOM遍历

DOM 遍历是指在 HTML 文档中导航和定位元素的过程。通过 DOM 遍历&#xff0c;您可以在文档中移动并查找特定的元素&#xff0c;以便对其进行操作或者检索信息。 寻找子元素 //DOM遍历 const h1 document.querySelector(h1);//寻找子元素 console.log(h1.querySelectorAll(.…