win32汇编快速入门

汇编可以开发WINDOWS程序?答案是肯定的,用WIN32汇编语言开发出来的WINDOWS程序具有执行效率高、占用空间小等特点。

一、开发工具下载与安装
  在众多WIN32汇编开发工具中,MASM32笔者比较偏爱,它具有很多代码示例和丰富的开发资源,在下列下载地址中选择一个地址下载MASM32。
二、知识预备
  1、寄存器
   为了提高运算速度和数据的存取速度,在计算机的CPU内,有一组硬件装置,第一个装置内存放CPU运算需要的数,这些数值可供CPU直接存取,这组装置叫寄存器。寄存器分为通用寄存器、段寄存器、程序指针寄存器、标志寄存器。
   编程最常用就是通用寄存器,常用的通用寄存器有eax,ebx,ecx,edx,esi,edi等等,现代计算机的CPU一般是以32位为单位进行运算,因此一个寄存器最大能存放32位的二进制数。每个寄存器通常都有它默认的用法,所谓默认只是一种编程的习惯,你可以不遵守这些用法,但是有些情况下必须遵守,因为我们开发的是WINDOWS程序,要遵守WINDOWS操作系统的规定和汇编语法本身的约束,比如调用一个WINDOWSAPI函数,返回值放在EAX,堆栈的栈顶地址在esp,在汇编语言的循环中,ECX内存放循环的次数。具体寄存器的使用会在以后介绍。
  2、堆栈
   堆栈是个非常古老的概念,在DOS时代就有了,也是个非常重要的东西,程序没了它就活不了,堆栈就是在内存里分配一个区域,使用这个区域必须遵守一个规定:后进先出,后进来的先出去,可以把它想像成一个空木箱,首先往里面放棉衣,然后往里面放书,最后放上运动服。如果要取出书,必须得把最后放上的运动服取出,放的顺序是棉衣->书->运动服,取的顺序是运动服->书->棉衣,堆栈也是如此。
   先解释一下什么是地址,内存价格的便宜和内存容量的扩大,WINDOWS虚拟内存早已出现,内存中放着众多的数据,必须要有方法表示内存某个地点,这个地点就用地址来表示。把内存以字节为单位划分,某个地址表示某个字节的地址,如左下图是一个内有4个成员的堆栈,堆栈里的成员以一个字节为单位(数的右边标明了以十六进制表示的地址,如1001)
+--+
|AF|   地址:AF21
+--+
|03|   地址:AF20
+--+
|30|   地址:AF19
+--+
|F1|   地址:AF18
+--+ 
  堆栈是向下增长的,每增加一个成员,栈顶(堆栈顶部的地址)的地址减1,对于这个堆栈,栈顶地址是AF18,如果再往这个堆栈里增加一个成员的话,它的地址是:AF18-1=AF17。如果往这个堆栈里增加一个32位的数,栈顶的地址是多少呢,32位的数占4个成员的位置,栈顶的地址为:AF18-4=AF14。
  在这个堆栈中增加一个32位数DAB0CD90,新的堆栈如下:
 
+--+
|AF|   地址:AF21
+--+
|03|   地址:AF20
+--+
|30|   地址:AF19
+--+
|F1|   地址:AF18
+--+ 
|DA|   地址:AF17
+--+
|B0|   地址:AF16
+--+
|CD|   地址:AF15
+--+
|90|   地址:AF14
+--+ 
 
  如果从堆栈里拿走一个32位数,则栈顶的地址为:AF14+4=AF18
三、WIN32汇编语言的语法
   为了方便大家理解和入门,下面尽量使用宏汇编和伪指令地方进行描述,也正因为有了宏汇编和伪指令的帮助,WIN32汇编才具有很多高级语言的特性,很多语法和C差不多。
  1、WIN32汇编程序基本结构
   .386
   .MODEL Flat,STDCALL
   .DATA
     初始化值的全局变量定义
   .DATA?
     未初始化值的全局变量定义
   .CONST
     常量定义
   .CODE
    ..............
    ...............     
   程序入口LABEL
     ............
     ............
    end程序入口LABEL
2、变量定义
   (1)定义全局变量
   全局变量定义在.data和.data?内,
   初始化变量的定义方式如下:
   .data
   变量名  类型  初始值1,初始值2,.......
   变量名  类型  重复次数dup(初始值1,初始值2,....)
   
    注意:如果用?表示初始值的话,则表示0
   
   未初始化变量的定义方式是
   .data?
    变量名  类型 ?
 
   (2)条件测试语句
   (A)基本结构
    .IF条件
       程序代码
    [.ELSEIF]条件比较
      程序代码
      .......
   [.ELSE]
       程序代码
    .ENDIF
   (3)操作符
   (A)比较操作符
    == 相等
   !=  不等于
   >   大于
    >=  大于或等于
   <   小于
    <=  小于或等于
   &   位测试
    !  逻辑非
   &&  逻辑与
   ||  逻辑或
   (B)位操作符
    AND按位与
   OR  按位或
   XOR 异或
    SHL逻辑左移
    SHR逻辑右移
   (C)标志寄存器操作符
    CARRY?是否进位
   OVERFLOW? 是否溢出
   PARITY?  奇偶位是否置位
   SIGN?   符号位标志位是否被置位
   ZERO?   零位标志位是否置位
   (4)循环语句  
(A)while语句 
 while 条件
    ..........
    ..........
   [.break[.if 退出条件]]
   [.contine[.if 退出条件]]]
  .end
(B)repeat语句
.repeat
...........
..........
[.break[.if 退出条件]]
[.contine[.if 退出条件]]]
.until 条件(或.untilcxz [条件])
(5)子程序定义
1、定义
子程序名 proc [距离][语言类型][可视区域][USERS 寄存器列表][,参数:类型]...[VARARG]local 局部变量列表
..............
...............
...............
子程序名 endp
2、如果在未定义前使用,要声明、
函数名 proto [距离][语言][参数1]:数据类型,[参数2]:数据类型,...............
(6)数据结构
(A)声明
wndclass struct
....
.....
......
wndclass ends
(B)定义
mystruct wndclass<1,1,...,1>
mystruct wndclass <>
(C)使用
mov eax,mystruct.lpfnwndproc
 
mov esi,offset mystruct
assume esi: ptr WNDCLASS
mov eax,[esi].lpfnwndproc
 
.......
assume esi:nothing
四、在WIN32汇编中的使用WINDOWS API
  WIN32汇编如果没有API的帮助无法实现很多功能,笔者没见过在WIN32汇编程序不调用API的。
  调用API实际上是靠堆栈来完成参数传递的,既然是堆栈,那就要遵守后进先出的原则,这意味API的第一个参数是最后一个放入堆栈的,最后一个参数是第一个放入堆栈的。  
   调用方式如下:
push 参数n
..........  
push 参数2
push 参数1
call API函数名
  为了简化代码,也可以使用以下这种方式调用API
invoke API函数名,参数1,参数2,.....,参数n
Win32反汇编(七)浮点指令(FLD / FILD / FSTP)与位移指令的逆向分析 前言 作者:浪子花梦,一个有趣的程序员 ~ 此系列文章都是一些基础的文章,每篇文章都通过几个小例子快速的了解 Win32反汇编与OD的使用,在此作个笔记 如若对您有帮助,记得三连哟 ~ 前文链接 Win32反汇编(一) 初步探索Win32反汇编 与 Ollydbg的简单使用 Win32反汇编(二)几种常见的指令反汇编详解:EAX、MOVSX与MOVZX、LEA、SUB、CMP与转移指令 Win32反汇编(三)深层次的了解各种转移指令:IF语句有符号与无符号跳转 Win32反汇编(四)栈的工作原理与堆栈. 阅读详情

相关推荐

WIN32汇编: 25.位图初步

第二十五课:位图初步在这一课,我们将学习怎样在程序中使用位图。 更准确地说,我们要学习的是怎样在一个窗口的客户区中显示位图。 理论位图就是存贮于电脑中的图片。位图文件有相当多的格式(译者:如.BMP.JPG.GIF.PIC 等)但Windows仅支持 Windows Bitmap Graphics 格式,即BMP文件。 本课所指的位图也是BMP文件。 使用位图最简单的方法就是把它定义在

GodDragon的专栏 2684

Win32汇编学习笔记之基础篇

基础篇 第一章 背景知识 1.1 Win32的软硬件平台 1.1.1    80x86系列处理器简史 Win32可以在多种硬件平台上运行,但使用最广泛的硬件平台是基于Intel公司80x86系列处理器的微型计算机。 自1978年6月Intel公司推出它的第一个16位微处理器8086以来,计算机技术就开始进入飞速发展的时期。8086芯片的主频为4.43MHz,

MyBlog 1105

【Win32汇编】MOVS,STOS,REP 指令

MOVS MOVS 指令用于将一个内存操作数的值“复制”到另一个内存操作数,使用 MOVS 前要把目标内存的地址移入 EDI,源目标内存移入 ESI。(记忆方法:D表示destination,目标;S表示source,源) 假设内存 0x0019FF70 的值为1,0x0019FF6C 的值为2,将这两个地址分别存入EDI ESI,如图: 执行指令,注意 ES:[EDI] 和 DS:[ESI]...

hambaga的博客 3251

Win32汇编基础教程

Win32汇编教程之一Win32汇编的环境和基础1.32位环境简介  在Dos下编汇编程序,我们可以管理系统的所有资源,我们可以改动系统中所有的内存,如自己改动内存控制块来分配内存,自己修改中断向量表来截获中断等,对其他操作也是如此,如我们对键盘端口直接操作就可以把键盘屏蔽掉,可以这样来描述Dos系统:系统只有一个特权级别,在编程上讲,任何程序和操作系统都是同级的,所以在Dos下,一个编得不好的程

t0nsha's Blog 4504

32位汇编:MASM32环境搭建与汇编窗口程序

从零开始:32位汇编开发环境搭建与第一个窗口程序实战

re1ife的博客 2835

Iczelion经典Win32汇编实例源码全解析

首先需要在.data段中定义所需字符串:.data', 0注意:所有Win32字符串必须以\0结尾,否则可能导致乱码或访问越界。在现代操作系统环境下,尤其是基于Win32平台的汇编程序开发中,理解内存段结构不仅是编写可执行代码的前提,更是实现高效、稳定和安全程序运行的核心基础。x86架构采用分段机制组织内存空间,尽管在保护模式下段描述符由操作系统内核统一管理,但程序员仍需明确各段的功能定位及其对数据定义的影响。

weixin_42613017的博客 1070

Win32汇编:基础知识入门

汇编语言是所有程序设计语言中最古老的,它与计算机机器语言最为接近,通过汇编语言可以直接访问计算机的硬件,能够直接与CPU对话,可以说汇编语言是所有编程语言中语法格式最自由的,但自由的代价就是需要了解计算机体系结构和操作系统的大量细节,每编写一段程序都需要考虑各种硬件的状态,从而导致使用汇编写程序效率非常低.

微软技术分享 7607

深入掌握Win32汇编语言程序设计

汇编语言是一种低级语言,它与机器语言非常接近,但提供了可读的符号和指令来代替二进制代码。每条汇编指令通常对应于处理器的一个操作,如数据传输、算术运算或逻辑运算等。由于汇编语言与硬件结构紧密相关,它为程序员提供了控制硬件特性的强大能力。

weixin_28931449的博客 1164

Win32汇编学习——windows基础知识(小甲鱼教程)

《Win32汇编语言程序设计》(小甲鱼) 1)windows特权保护机制 1)80386的中断和异常 2)80386的保护机制 3)Windows的保护机制 2)80x86处理器的工作模式 1.实模式 2.保护模式 3.虚拟8086模式 3)Win7的启动过程 1.开启电源,加电自检(在主板上的一个BIOS芯片) 检查完之后(检查一些硬盘,磁盘、CPU...看能不能通...

team39的博客 2366

win32汇编教程(比较全)

mht格式的win32汇编,比较全!想学汇编的朋友可以下载来看看。

潜在图神经网络学习笔记(Latent Graph Neural Networks for Human Skeleton-based Action Recognition)

在本文中,我们从一个新的角度来解决这个问题,通过将非结构化的骨架数据映射到潜在空间,如图2所示,这里称为潜在特征空间或嵌入空间,其中一组项嵌入在一个流形中[ 1 ],并且在潜在空间中彼此更相似的项被放置在彼此更接近的位置。潜在空间中的位置可以被认为是由一组潜在变量定义的,这些潜在变量来源于对象的相似性。将骨架数据嵌入到流形中,消除了远近邻居之间的冗余依赖关系,以解决加权问题。得到具有多尺度聚合特征的稀疏图矩阵结构,以更好地理解骨骼关节的直接加权信息。

qq_45631885的博客 489

Win32 PE病毒入门教程

Win32 PE病毒入门教程by Koms Bomb免责声明:如果有人因为看了本文而写出任何恶性病毒进而对社会造成任何伤害,与本人无关。本人只是讨论一些理论知识而已。写本文的目的:1,像普及性知识那样普及病毒知识,即使是老处男(说我呢?郁闷中)老处女也要懂性知识,所以爱好编程的也最好懂一些病毒的编写原理。2,发扬中国的病毒事业。为什么要发扬?去看我的其它文章。本文面向的读者:1,熟悉W

KomsBomb的专栏 5444

Excel基金净值自动更新:手把手教你用Power Query抓取天天基金网数据(含常见错误修复)

本文详细介绍了如何利用Excel内置的Power Query工具,从天天基金网自动抓取基金净值数据,实现表格数据的自动刷新。通过手把手教程,您将学会构建参数化查询、整合多基金数据、计算持仓盈亏,并解决网页结构变动等常见错误,最终打造一个专属的、可自动更新的基金监控仪表盘,彻底告别手动更新。

xx56789的博客 730

小甲鱼

小甲鱼视频教学计划安排(该计划于2017年5月1日更新) 岁月如梭,白驹过隙!时间一晃过了七年有余……这几年来,小甲鱼都做了哪些教程? 教程名称 录制时间 制作状态 下载地址 详细目录 《零基础入门学习C语言》 2010年 ~ 2011年 已完成 废弃,见注1 传送门 ...

weixin_30662849的博客 288

深度学习入门:一文详解BP神经网络

在BP神经网络中,输入层和输出层的节点个数都是确定的,而隐含层节点个数不确定,那么应该设置为多少。实际上,隐含层节点个数的多少对神经网络的性能是有影响的,有一个经验公式可以确定隐含层。上面是对隐含层和输出层之间的权值和输出层的阀值计算调整量,而针对输入层和隐含层和隐含层的阀值调。在BP神经网络中,输入层节点没有阀值。神经网络,神经网络在机器学习中应用比较广泛,比如函数逼近,模式识别,分类,数据压缩,数据。要求输入模式要有足够的随机性,对输入模式的噪声比较敏感,即对于剧烈变化的输入模式,训。

Machine Learning with Tutors 4万+

在实车上进行lio-sam测试

PS:将雷达和imu相对固定后,拆下来,原地晃啊晃,直到xyz进度达到百分百,参考gif。标定完成后,会在result文件夹下生成result.txt。

如果想成为中心,那么就到中心去吧。 997

Win32反汇编(一) 初步探索Win32反汇编 与 Ollydbg的简单使用

前言 时间:2020.8.8,一直想学逆向工程,刚好最近时间比较充足,每天除了刷算法题也可以学逆向了 . . . 此系列文章都是一些基础的文章,通过几个小例子快速的了解 Win32反汇编与OD的使用,在此作个笔记 如若对您有帮助,记得三连哟 ~ 文章目录 OD介绍 全局变量赋值的反汇编形式(包含) 函数调用的反汇编形式 加法计算与内存单元长度的修饰讲解 OD介绍 在研究反汇编之前,我们先来了解一下以后会一直用的神器: Ollydbg 1. Ollydbg 简介 Ollydbg 用作动态调试,一.

浪子花梦 3188

本地Pycharm连接远程服务器详细配置过程(直接在本地使用服务器显卡,很棒)

相信很多人都遇见过这种情况:实验室成员使用同一台服务器,每个人拥有自己的独立账号,我们可以使用服务器更好的配置完成实验,毕竟自己哪有money拥有自己的3090呢。

NorthSmile的博客 4万+

关于win32汇编的调试

在VC6环境下的win32汇编的调试,网上找的一篇文章,照着试了试,蛮不错的,特别是习惯VC编程的人来说,这种调试方法使用起来得心应手。用VC6调试器源码级调试win32汇编程序  使用一个好的调试器无疑对学习win32汇编是至关重要的,本人更偏爱VC的强大调试环境, 不要makefile文件。编程环境:VC6.0,Masm32v8 方法如下:1、 使用VC6新建一

raiky的专栏 907

基于STM32设计自动输液监测系统(241)

该系统集成了液位传感模块、光电传感器、电机模块、按键模块和OLED显示屏等多个功能模块,以实现全面的输液过程监控和控制。液位传感模块能够实时监测输液瓶中的液位,当液位到达限定值时,系统会自动控制步进电机夹紧输液管,并发出报警提醒,确保输液过程不会因液位过低而中断。

1342

2026华为OD机试(C++)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,C++实现。

MISAYAONE的博客 20万+

WIN32汇编程序的编译方法,环境配置,make的简单应用

 主题:WIN32汇编程序的编译方法,环境配置,make的简单应用作者:gnuserurl:    http://bestbbs.5d6d.com学习一门语言最开始最好弄懂一个简单例子,而往往很多资料忽视了这一点,让初学者还没入门就卡死在门外.网上的资料也不太标准,以至于象我这种初学者摸索好久才有所得.现在开始写笔记吧,废话不多说了,时间宝贵.工具:masm,link,make

凡人凡居 1759

双Orin PCIe RC&EP模式互通

orin pcie 互通

乐于分享 3877

Win32汇编入门概述

在一个月前我打算学Win32汇编,发现汇编的基础不是太好,便花了近一个月的时间把王爽老师的《汇编语言》看了一遍。现在再来看Win32汇编,比一个月前轻松了不少。真是本看书,对于我个人来说。 接下来,我将继续Win32汇编的学习。坚持、坚持! Let's go!   Background   Windows环境下32位汇编语言是一种全新的编程语言。它使用与C++语言相同的A

MyBlog 1642

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: WIN32汇编-HELLO,WORLD!
下一篇: 揭开二进制的神秘面纱
deepfuture
博客等级 码龄17年 210粉丝 1287原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值