Windows逆向工程入门之纯汇编程序解析(MASM)

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

目录

一、Visual Studio 2019 与 MASM 环境搭建

二、汇编程序框架

三、程序指令集与工作模式

四、动态调用与函数声明

五、数据段的三种形式

六、代码段特性

七、程序入口点


在Windows逆向工程的学习过程中,掌握在Visual Studio 2019中的MASM(Microsoft Macro Assembler)汇编语言环境,是深入分析计算机底层原理和开发高效代码的基础。


一、Visual Studio 2019 与 MASM 环境搭建

  1. 环境配置步骤

  2. 汇编代码工程结构


二、汇编程序框架

在MASM中,汇编程序遵循特定的框架结构。以下示例演示了一个标准的MASM程序框架:

; 标准程序框架  
.386                      ; 指定指令集(支持80386及以上指令)  
.model flat, stdcall      ; 内存模型与调用约定  
option casemap:none       ; 不区分大小写  .data                     ; 数据段定义  message db "Hello, World!", 0  .code                     ; 代码段定义  
start:    invoke MessageBoxA, NULL, addr message, addr message, MB_OK ; 调用Windows API MessageBoxA  invoke ExitProcess, 0                                       ; 退出当前进程  
end start                  ; 程序入口点

拓展说明

  • .386:启用32位指令支持,使用现代处理器架构。
  • .model flat, stdcall:指定平面内存模型及调用约定stdcall
  • .data.code:区分全局静态数据和执行代码。

三、程序指令集与工作模式

  1. 指令集

    • x86架构支持常见的指令集:
      • 数据传输指令:MOV、PUSH、POP等。
      • 算术指令:ADD、SUB、IMUL、IDIV等。
      • 逻辑操作:AND、OR、XOR、NOT等。
      • 控制流:JMP、CALL、RET、JE、JNE等。
    • 在x64模式下,则有扩展寄存器和指令,如RAX、RBX。
  2. 工作模式

    • 实模式:16位模式,直接访问物理内存,主要用于早期DOS系统。
    • 保护模式:32位或64位模式,支持虚拟内存和内存保护,是现代操作系统的主要模式。
    • 长模式:64位模式,支持更大的地址空间和更高效的指令集。

拓展知识点

  • SSE/AVX:用于浮点运算和向量运算。
  • 系统指令:如INT(中断指令)、IN/OUT(端口操作)。

四、动态调用与函数声明

  1. 函数调用的两种方式

    • 静态调用:函数地址在编译时已确定(如直接调用子函数)。
    • 动态调用:通过函数指针或加载动态链接库(DLL)来调用函数。
  2. 声明与调用Windows API

    • 使用invoke指令调用API:

      invoke MessageBoxA, NULL, addr message, NULL, MB_OK

    • 使用stdcallcdecl定义自定义函数。

调用约定

  • stdcall:参数从右到左压栈,由被调用者清理栈。
  • cdecl:参数从右到左压栈,由调用者清理栈。

五、数据段的三种形式

  1. .data

    • 定义已初始化的全局静态数据。
    • 示例:
.data  
szText db "Hello, World!", 0  
dwValue dw 1234h
  1. .code

    • 定义未初始化的变量,可节约程序大小。
    • 示例:
.code  
main PROC  ; 代码逻辑  
main ENDP
  1. .const

    • 用于存储变量不可更改的常量数据。
    • 示例: 
.const  
PI REAL4 3.1415926

六、代码段特性

  1. 可执行性

    • 代码段包含程序的指令,具有可执行权限。
  2. 只读性

    • 代码段通常是只读的,防止程序运行时被修改。
  3. 地址对齐

    • 代码段通常按页对齐,以提高执行效率。

七、程序入口点

  1. 定义入口点

    • 使用end标记程序的入口点,通常是start标签:
      end start 
    • 在Visual Studio中,可指定.asm中程序的起始点。
  2. 入口点的作用

    • 指定程序执行的第一条指令。
    • 在逆向过程中,识别入口点是关键的一步。

拓展知识点

  • PE文件结构:入口点在PE文件的AddressOfEntryPoint字段中指定。
  • 跳转表:分析入口点如何跳转到实际程序逻辑。

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

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

相关文章

matlab-simulink

1、信号到对象解析指示符 代表的意义是:信号名称必须解析为信号对象 2、input inport 双击空白区域输入模块名字,自动联想显示相关模块 没看出太大的差别 3、Stateflow 双击空白区域输入stateflow、或者chart或者常用库里面去查找 4、离散时间积分…

简单几个步骤完成 Oracle 到金仓数据库(KingbaseES)的迁移目标

作为国产数据库的领军选手,金仓数据库(KingbaseES)凭借其成熟的技术架构和广泛的市场覆盖,在国内众多领域中扮演着至关重要的角色。无论是国家电网、金融行业,还是铁路、医疗等关键领域,金仓数据库都以其卓…

网络安全概论——网络安全基础

一、网络安全引言 信息安全的四个属性(信息安全的基本目标 ) 保密性:信息不会被泄露给非授权用户完整性:保证数据的一致性可用性:合法用户不会被拒绝服务合法使用:不会被非授权用户或以非授权的方式使用 二、网络安全…

数据结构-链式二叉树

文章目录 一、链式二叉树1.1 链式二叉树的创建1.2 根、左子树、右子树1.3 二叉树的前中后序遍历1.3.1前(先)序遍历1.3.2中序遍历1.3.3后序遍历 1.4 二叉树的节点个数1.5 二叉树的叶子结点个数1.6 第K层节点个数1.7 二叉树的高度1.8 查找指定的值(val)1.9 二叉树的销毁 二、层序…

SpringCloud系列教程:微服务的未来(二十三)SpringAMQP快速入门、Work Queues、Fanout交换机

前言 Spring AMQP是Spring框架中用于与消息中间件(如RabbitMQ)进行交互的一个项目,它简化了消息发送、接收以及消息处理的过程。通过Spring AMQP,开发者可以快速实现基于RabbitMQ的消息传递系统。本文将介绍Spring AMQP的快速入门…

单片机简介

一、单片机简介 电脑和单片机性能对比 二、单片机发展历程 三、CISC VS RISC

Java中面向对象的三大特性 -- 有关多态

学习目标 理解多态掌握instanceof了解抽象类,抽象方法 1.多态(向上转型) ● 现在我们已经学会了继承(类与类之间的)关系,并且能够在子类继承父类的基础上进一步对子类的数据及操作进行扩展,增加新的成员变量和方法或…

在本地校验密码或弱口令 (windows)

# 0x00 背景 需求是验证服务器的弱口令,如果通过网络侧校验可能会造成账户锁定风险。在本地校验不会有锁定风险或频率限制。 # 0x01 实践 ## 1 使用 net use 命令 可以通过命令行使用 net use 命令来验证本地账户的密码。打开命令提示符(CMD&#xff0…

蓝桥杯嵌入式备赛(四)—— 中断 + UART

目录 一、STM32 NVIC中断系统1、NVIC介绍2、Cortex-M4优先级设置 二、UART介绍1、原理图介绍2、原理图介绍及编程步骤(1)CubeMX设置(2)UART 发送(3)UART 接收 一、STM32 NVIC中断系统 1、NVIC介绍 STM32G4…

AI前端开发的学习成本与回报——效率革命的曙光

近年来,人工智能技术飞速发展,深刻地改变着各行各业。在软件开发领域,AI写代码工具的出现更是掀起了一场效率革命。AI前端开发,作为人工智能技术与前端开发技术的完美结合,正展现出巨大的发展潜力,为开发者…

AI前端开发的持续学习策略:拥抱变化,精进技艺

在飞速发展的科技浪潮中,AI前端开发领域正经历着日新月异的变化。作为一名AI前端开发者,你是否感到技术更新迭代之快,对自身持续学习能力提出了更高的要求? 想要在竞争激烈的行业中保持领先地位,持续学习不再是一种选择…

sql盲注脚本

在sqli-labs中的第8题无回显可以尝试盲注的手法获取数据 发现页面加载了3秒左右可以进行盲注 布尔盲注数据库名 import requestsdef inject_database(url):datanamefor i in range(1,15):low 32high 128mid (low high) // 2while low < high:path "id1 and asci…

DeepSeekR1 苹果macbook M1本地可视化运行!

过年了&#xff0c;就带了一台 macbook air 8g&#xff0c;DeepSeekR1的消息还是铺天盖地的来&#xff0c;我就想着在这台电脑上也装一个吧。 经过简单的配置&#xff0c;最终也运行起来了&#xff0c;速度还可以。 我这是首款M系列笔记本&#xff0c;也是现在最低配的 M 系列…

centos 10 离线安装dnf 和 设置dnf镜像源

离线安装dnf可用kimi搜索, centos 使用curl 下载dnf 的rpm包 mkdir ~/dnf_packages cd ~/dnf_packages# CentOS 7 示例 curl -O http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-0.6.4-2.sdl7.noarch.rpm curl -O http://springdale.math.ias.edu/data/pu…

Vivado生成edif网表及其使用

介绍如何在Vivado中将模块设为顶层&#xff0c;并生成相应的网表文件&#xff08;Verilog文件和edif文件&#xff09;&#xff0c;该过程适用于需要将一个模块作为顶层设计进行综合&#xff0c;并生成用于其他工程中的网表文件的情况。 例如要将fpga_top模块制作成网表给其它工…

【Python网络爬虫】爬取网站图片实战

【Python网络爬虫】爬取网站图片实战 Scrapying Images on Website in Action By Jackson@ML *声明:本文简要介绍如何利用Python爬取网站数据图片,仅供学习交流。如涉及敏感图片或者违禁事项,请注意规避;笔者不承担相关责任。 1. 创建Python项目 1) 获取和安装最新版…

Python从0到100(八十八):LSTM网络详细介绍及实战指南

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

window patch按块分割矩阵

文章目录 1. excel 示意2. pytorch代码3. window mhsa 1. excel 示意 将一个三维矩阵按照window的大小进行拆分成多块2x2窗口矩阵&#xff0c;具体如下图所示 2. pytorch代码 pytorch源码 import torch import torch.nn as nn import torch.nn.functional as Ftorch.set_p…

python013-基于Python的智能停车系统的设计与实现(源码+数据库+论文+部署讲解等)

&#x1f495;&#x1f495;作者&#xff1a; 爱笑学姐 &#x1f495;&#x1f495;个人简介&#xff1a;十年Java&#xff0c;Python美女程序员一枚&#xff0c;精通计算机专业前后端各类框架。 &#x1f495;&#x1f495;各类成品Java毕设 。javaweb&#xff0c;ssm&#xf…

gitlab无法登录问题

在我第一次安装gitlab的时候发现登录页面是 正常的页面应该是 这种情况的主要原因是不是第一次登录&#xff0c;所以我们要找到原先的密码 解决方式&#xff1a; [rootgitlab ~]# vim /etc/gitlab/initial_root_password# WARNING: This value is valid only in the followin…