当前位置: 首页 > news >正文

Windows逆向工程入门之汇编指令格式与操作数类型

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

一、汇编指令格式基础

二、操作数类型详解

1. 立即数(Immediate)

2. 寄存器操作数(Register)

3. 内存操作数(Memory)

4. 端口操作数(Port)

三、汇编指令格式分类

1. 零操作数指令

2. 单操作数指令

3. 双操作数指令

4. 三操作数指令

四、逆向工程中的指令解析技巧

五、拓展知识点


一、汇编指令格式基础

汇编指令由操作码(Opcode)操作数(Operand)组成,是计算机执行的最底层命令。

格式为:

操作码 [目标操作数], [源操作数]

MOV EAX, EBX     ; 将EBX的值复制到EAX
ADD DWORD [ESI], 0x10  ; 将ESI指向的内存地址的值加0x10

二、操作数类型详解

操作数决定了指令操作的数据来源和去向,主要分为以下四类:


1. 立即数(Immediate)
  • 定义:直接编码在指令中的常数(数值或地址)。

  • 特点:不可修改,常用于赋值或运算。

  • 示例

    MOV EAX, 1234h      ; EAX = 0x1234
    ADD ECX, 0x55AA     ; ECX += 0x55AA
2. 寄存器操作数(Register)
  • 定义:使用CPU寄存器(如EAX、EBX等)作为数据源或目标。

  • 特点:速度最快,无内存访问开销。

  • 示例

    XOR EDX, EDX        ; EDX = 0(清零)
    SHL EAX, CL         ; EAX左移CL次(CL为寄存器操作数)
3. 内存操作数(Memory)
  • 定义:通过内存地址访问数据,需指定地址计算方式。

  • 语法

    • 直接寻址[地址]

      MOV EAX, [0x401000]  ; 将0x401000地址处的值读入EAX
    • 寄存器间接寻址[基址寄存器 + 偏移量]

      MOV EBX, [ESI + 8]   ; EBX = ESI指向地址+8处的值
    • 比例因子寻址(x86特有):[基址 + 索引寄存器 * 比例因子 + 偏移]

      MOV ECX, [EAX + EDX*4 + 0x10] ; 常用于数组操作
4. 端口操作数(Port)
  • 定义:通过I/O端口与硬件交互(如键盘、磁盘控制器)。

  • 指令INOUT

  • 示例

    IN AL, 0x60   ; 从键盘端口0x60读取一个字节到AL
    OUT 0x20, AL   ; 将AL的值写入中断控制器端口0x20

三、汇编指令格式分类

根据操作数数量和类型,指令格式可分为以下类别:


1. 零操作数指令
  • 特点:仅操作码,无显式操作数(隐含操作数)。

  • 示例

    NOP         ; 空操作(占用1字节)
    RET         ; 函数返回(操作数隐含为栈顶地址)
2. 单操作数指令
  • 特点:仅有一个操作数(目标或源)。

  • 示例

    INC EAX     ; EAX += 1
    NOT DWORD [EBX] ; 对EBX指向的DWORD取反
3. 双操作数指令
  • 特点:最常见格式,支持寄存器、内存、立即数组合。

  • 规则

    • 目标操作数不能是立即数。

    • 源和目标不能同时为内存操作数(x86限制)。

  • 示例

    MOV EAX, [EDI]      ; 合法:内存到寄存器
    ADD DWORD [EBP-4], 5 ; 合法:内存 + 立即数
    CMP ESI, EDX        ; 合法:寄存器比较
4. 三操作数指令
  • 特点:现代SIMD指令(如AVX)或特殊指令支持。

  • 示例

    IMUL EAX, ECX, 16 

四、逆向工程中的指令解析技巧
  1. 识别操作数类型

    • 立即数:直接数值(如0x401000)。

    • 寄存器:EAX、EBX等寄存器名称。

    • 内存地址:方括号[]包裹的表达式。

  2. 内存寻址模式分析

    • 静态地址MOV EAX, [0x404000](可能访问全局变量)。

    • 动态计算MOV ECX, [EBX + ESI*4 + 8](典型数组或结构体访问)。

  3. 指令副作用分析

    • 隐式操作数:如MUL ECX会修改EDX:EAX 。

    • 标志寄存器影响CMP指令会设置ZF、CF等标志位。


五、拓展知识点
  1. 指令编码格式(Opcode Encoding)

    • Opcode:1~3字节,决定操作类型(如MOV的Opcode为0x8B)。

    • ModR/M字节:指定操作数类型(寄存器/内存)和寻址模式。

    • SIB字节(Scale-Index-Base):扩展复杂内存寻址(如比例因子)。

    • 示例

      机器码:8B 45 FC
      反汇编:MOV EAX, [EBP-4]
  2. CISC与RISC架构差异

    • CISC(x86):指令长度可变,支持复杂内存操作(如MOV [EAX+EBX*4], EDX)。

    • RISC(ARM):指令长度固定(32位),内存操作需专用加载/存储指令(如LDR R0, [R1])。

  3. 高级指令集(SIMD与特权指令)

    • SIMD指令(SSE/AVX):

      PADDB XMM0, XMM1  ; 对XMM0和XMM1按字节相加
    • 特权指令

      CLI               ; 关闭中断(Ring 0权限)
      MOV CR0, EAX      ; 修改控制寄存器(内核模式)
  4. 调试与反汇编工具技巧

    • 动态调试(x64dbg):

      • 单步执行观察指令对寄存器和内存的影响。

      • 使用“内存映射”窗口查看内存操作数指向的实际数据。

    • 静态分析(IDA Pro):

      • F5生成伪代码时,注意内存寻址的变量名推断。

      • 使用“交叉引用(Xref)”追踪内存或寄存器的使用路径。

  5. 高级语言与汇编的对应关系

    • C/C++代码

      int arr[10];
      arr[3] = arr[2] + 1;
    • 对应汇编

      MOV EAX, [arr + 8]    ; arr[2]
      INC EAX
      MOV [arr + 12], EAX   ; arr[3]

相关文章:

Windows逆向工程入门之汇编指令格式与操作数类型

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、汇编指令格式基础 二、操作数类型详解 1. 立即数(Immediate) 2. 寄存器操作数(Register) 3. 内存操作数(Memory&#…...

亚远景-ASPICE 4.0与敏捷开发:如何实现高效协同

ASPICE 4.0与敏捷开发的结合是汽车软件开发领域的重要趋势。通过合理融合,可以实现高效协同,提升软件开发的质量和效率。以下是实现高效协同的关键要点: 1. 理解ASPICE 4.0与敏捷开发的互补性 ASPICE 4.0强调软件开发过程的规范性、可追溯性…...

pptx文档提取信息

目录 一、前言二、python-pptx提取核心代码三、LibreOffice 转换pdf再提取的核心代码一、前言 pptx文档提取解析常用的库。 如果只需要解析 .pptx 的文本、表格、图片,推荐使用 python-pptx(开源,轻量级)。 如果需要高性能、支持 .ppt、动画、格式转换,推荐 Aspose.Slid…...

蓝桥杯篇---超声波距离测量频率测量

文章目录 简介第一部分:超声波的简介工作原理1.发射超声波2.接收反射波3.计算时间差4.计算距离 硬件连接1.Trig2.Echo 示例代码代码说明注意事项1.声速2.延时精度3.硬件连接 第二部分:频率测量简介频率测量原理1.信号输入2.计数3.计算频率 硬件连接示例代…...

ML.Net二元分类

ML.Net二元分类 文章目录 ML.Net二元分类前言项目的创建机器学习模型的创建添加模型选择方案训练环境的选择训练数据的添加训练数据的选择训练数据的格式要预测列的选择模型评估模型的使用总结前言 ‌ML.NET‌是由Microsoft为.NET开发者平台创建的免费、开源、跨平台的机器学习…...

vite让每个scss文件自动导入某段内容

写了如下一个scss函数,希望自动导入到每个scss文件里面 vite.config.ts里面如下配置 import fs from fsconst filePath resolve(__dirname, ./src/assets/css/index.scss);const Minxcss fs.readFileSync(filePath, utf8); css: {preprocessorOptions: {scss: {…...

分享一个使用的音频裁剪chrome扩展-Ringtone Maker

一、插件简介 铃声制作器是一个简单易用的 Chrome 扩展,专门用于制作手机铃声。它支持裁剪音频文件的特定片段,并将其下载为 WAV 格式,方便我们在手机上使用。无论是想从一段长音频中截取精彩部分作为铃声,还是对现有的音频进行个…...

基于Python的Optimal Interpolation (OI) 方法实现

前言 Optimal Interpolation (OI) 方法概述与实现 Optimal Interpolation (OI) 是一种广泛应用于气象学、海洋学等领域的空间数据插值方法。该方法通过结合观测数据与模型预测数据,最小化误差方差,从而实现对空间数据的最优插值。以下是OI方法的一般步骤…...

初学 mybatis

前言 回顾之前 不使用 mybatis 框架,我们是怎么通过Java 操作数据库的 "jdbc" 前提:使用maven 构建的项目 1 添加 关于jdbc 的依赖,以及辅助操作数据库的 commons-dubli jar包 截取 前后端项目 2 添加配置文件里面内容有&…...

机器学习:k均值

所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com),欢迎查看。 在“无监督学习”中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律&…...

保姆级GitHub大文件(100mb-2gb)上传教程

GLF(Git Large File Storage)安装使用 使用GitHub desktop上传大于100mb的文件时报错 The following files are over 100MB. lf you commit these files, you will no longer beable to push this repository to GitHub.com.term.rarWe recommend you a…...

1.【BUUCTF】[SUCTF 2019]EasyWeb

进入题目页面如下 给出源码开始代码审计 <?php // 定义一个名为 get_the_flag 的函数&#xff0c;该函数主要处理文件上传逻辑 function get_the_flag(){// 构造用户上传文件的目录&#xff0c;目录名是 "upload/tmp_" 加上客户端 IP 地址的 MD5 哈希值$userdir…...

CloudberryDB(七)二级索引

在CloudberryDB中&#xff0c;二级索引的概念与PostgreSQL中的类似。但是&#xff0c;由于分布式特性&#xff0c;创建和使用二级索引需要考虑一些额外的因素。以下是关于二级索引的一些要点&#xff1a; 1. **创建索引**&#xff1a;在Greenplum中&#xff0c;可以使用CREATE…...

P1878 舞蹈课(详解)c++

题目链接&#xff1a;P1878 舞蹈课 - 洛谷 | 计算机科学教育新生态 1.题目解析 1&#xff1a;我们可以发现任意两个相邻的都是异性&#xff0c;所以他们的舞蹈技术差值我们都要考虑&#xff0c;4和2的差值是2&#xff0c;2和4的差值是2&#xff0c;4和3的差值是1&#xff0c;根…...

何须付费免费它不香吗

聊一聊 又是一年开学季。 开学了发一些应时期的小软件。 今天给大家分享一款学校班级课程表工具。 这款工具可以投放在学校电子大屏上。 支持学校的白板软件。 软件介绍 学校班级课程表 工具界面清爽&#xff0c;信息能一目了然。 虽然看感觉功能简单&#xff0c;但每个…...

ELK组成及实现原理

ELK是由三个主要组件组成的日志处理和搜索平台&#xff0c;分别是&#xff1a; Elasticsearch&#xff1a;Elasticsearch 是一个基于Lucene构建的开源搜索引擎&#xff0c;提供强大的搜索、分析功能。它负责存储和索引所有数据&#xff0c;并提供实时搜索能力。数据可以通过HTT…...

【Vue3源码解析】响应式原理

源码环境搭建 【Vue3源码解析】应用实例创建及页面渲染-CSDN博客 写文章时的Vue 版本&#xff1a; "version": "3.5.13",针对单个包进行开发环境打包、测试。 pnpm run dev reactivityreactive 创建响应式对象 packages/reactivity/src/reactive.ts …...

servlet中的ServletContext

设置、获取ServletContext配置信息 与ServletConfig不同的是&#xff0c;所有Servlet共享一份ServletContext 在web.xml中设置配置信息 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"https://jakarta.ee/xml/ns/jakartaee"x…...

第1825天 | 我的创作纪念日:缘起、成长经历、大方向

目录 缘起一、成为创作者的初心&#xff08;一&#xff09;好记性不如烂笔头&#xff08;二&#xff09;文档可以帮助多个人解决同一个问题&#xff08;三&#xff09;加深自己对问题的理解&#xff0c;对技术的研究 二、实战项目中的经验分享&#xff08;一&#xff09;项目背…...

如何在 Mac 上解决 Qt Creator 安装后应用程序无法找到的问题

在安装Qt时&#xff0c;遇到了一些问题&#xff0c;尤其是在Mac上安装Qt后&#xff0c;发现Qt Creator没有出现在应用程序中。通过一些搜索和操作&#xff0c;最终解决了问题。以下是详细的记录和解决方法。 1. 安装Qt后未显示Qt Creator 安装完成Qt后&#xff0c;启动应用程…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...