基础结构

.386.model flat,stdcalloption casemap:none<一些include语句>.stack [堆栈段的大小].data<一些初始化过的变量定义>.data?<一些没有初始化过的变量定义>.const<一些常量定义>.code<代码><开始标号><其他语句>end 开始标号

;这里是注释  分行的办法是在一行的最后用反斜杠(\)做换行符

变量定义初始值放.data 未初始值.data? ;定义在 .data?段中不会增大 .exe文件的大小

表3.2  变量的类型

名    称                              表示方式               缩    写         长度(字节)

字节

byte

db

1

word

dw

2

双字(doubleword)

dword

dd

4

三字(farword)

fword

df

6

四字(quadword)

qword

dq

8

十字节BCD码(tenbyte)

tbyte

dt

10

有符号字节(signbyte)

sbyte

1

有符号字(signword)

sword

2

有符号双字(signdword)

sdword

4

单精度浮点数

real4

4

双精度浮点数

real8

8

10字节浮点数

real10

10

szBuffer            db      100 * 1024 dup (?)

szChar  db 'Hello, world;',0dh,0ah

1. 局部变量的定义

MASM用local伪指令提供了对局部变量的支持。定义的格式是:

local       变量名1[[重复数量]][:类型],变量名2[[重复数量]][:类型]……

local      loc1[1024]:byte        ;例1

local伪指令必须紧接在子程序定义的伪指令proc后、其他指令开始前,这是因为局部变量的数目必须在子程序开始的时候就确定下来

3. 获取变量地址

全局变量  mov     寄存器,offset 变量名

局部变量  lea     eax,[ebp-4]

该指令可以在运行时按照ebp的值实际计算出地址放到eax中。

如果要在invoke伪指令的参数中用到一个局部变量的地址,该怎么办呢?参数中是不可能写入lea指令的,用offset又是不对的。MASM对此有一个专用的伪操作符addr,其格式为:

addr 局部变量名和全局变量名

当addr后跟全局变量名的时候,用法和offset是相同的;当addr后面跟局部变量名的时候,编译器会自动用lea指令先把地址取到eax中,然后用eax来代替变量地址使用。注意addr伪操作符只能在invoke的参数中使用

调用API

原型 MessageBox Proto hWnd:dword,lpText:dword,lpCaption:dword,uType:dword

调用 invoke  MessageBox,NULL,offset szText,offset szCaption,MB_OK 或

push    uType

push    lpCaption

push    lpText

push    hWnd

call    MessageBox

函数的声明

函数名 proto [距离] [语言] [参数1]:数据类型,[参数2]:数据类型,...

例 参数名可省略

MessageBox  Proto  hWnd:dword,lpText:dword,lpCaption:dword,uType:dword

MessageBox  Proto  :dword,:dword,:dword,:dword

转载于:https://www.cnblogs.com/xuankuwa/p/3659320.html

win32汇编入门(一)相关推荐

  1. Win32 汇编环境和入门程序图解

    一 安装 在安装的最后,执行VBS脚本,在桌面建立快捷方式:执行快捷方式,会调入Win32汇编的编辑器qeditor.exe,进入到开发环境 二 构建Hello World程序 ;.386是伪指令 告 ...

  2. C指针原理(23)-win32汇编及.NET调试

    2018-12-28 20:36:07 在WINDOWS系统能用到汇编的机会不多,基本都可以用C或C++代劳,更何况现在MICROSOFT的Visual Studio 系列工具非常强大,WINDOWS ...

  3. Win32病毒入门 -- ring3篇

    Win32病毒入门 -- ring3篇 by pker / CVC.GB 1.声明 ------- 本文仅仅是一篇讲述病毒原理的理论性文章,任何人如果通过本文中讲述的技术或利用本文 中的代码写出恶性病 ...

  4. Win32病毒入门--ring3篇

    Win32病毒入门--ring3篇 声明 一篇讲述病毒原理的理论性文章,任何人如果通过本文中讲述的技术或利用本文中的代码写出恶性病毒,造成的任何影响均与作者无关. 前言 病毒是什么?病毒就是一个具有一 ...

  5. 新版WIN32汇编开发环境介绍及RadAsm简明教程

    写在前面的话: 在准备做教程的时候去查资料,关于WIN32下汇编方面的,本来想找些现成的拿到教程里用下,但发现貌似只有一篇,是2005年时jhkdiy写的,而且翻来翻去发现所有图片也都失效了.所以准备 ...

  6. Win32汇编WG系列教程1——《植物大战僵尸5211314》

    开篇语:            WG,一个很刺眼的名词,市面上大部分的挂都是使用VB/Delphi/C++或者E语言来写的,我之前也是使用Delphi和VB,这些语言的好处就是编写简单,容易入门!尤其 ...

  7. 【win32汇编】0x01 开篇一些乱七八糟的话

    之前弄完了16位汇编,现在正式学习win32汇编,首先就是一些原理了,其实就是在16位的基础上增加了一些内容,其程序主要的结构记录如下 (1)指令集     .386     这是指定指令集 必须工作 ...

  8. Win32汇编_基础

    Win32汇编_基础 包含全部段的源程序结构: .386 .model flat, stdcall Option casemap:none ;<一些include语句> .stack [堆 ...

  9. 选择“Win32汇编”的三大理由?

    选择Win32汇编的理由是什么呢? 在DOS时代,学习汇编就是学习系统底层编程的代名词,仅要成为一名入门级的汇编程序员,就需要学习从CPU结构.CPU工作方式.各种硬件的编程方法到DOS工作方式等范围 ...

最新文章

  1. PCL特征点与配准(1)
  2. qstring 属于元数据类型吗_数据仓库的“元数据管理”
  3. tomcat升级后报错: Invalid character found in the request target.
  4. 20172319 实验二《树》实验报告
  5. Python 计算各类距离
  6. linux 返回上一个文件夹_常用命令之linux指令
  7. lvalue-xvalue-prvalue
  8. 一张图教你玩转阿里云双11上云狂欢节
  9. 2016年我的学习记录与搜索到的网站,将持续更新,主要介绍我在公司应用ecshop的学习记录...
  10. HTML元素居中的方法
  11. 通信教程 | USB、HDMI、DP接口及速度
  12. linux改d5000默认路径,linux相关指令和d5000基础操作.pdf
  13. Pubg九月十六日服务器维护,9月16日绝地求生更新时间公告 绝地求生9月16日更新维护...
  14. 音箱高音测试电脑软件,BOSE MusicMonitor电脑扬声器晒单 使用体验_什么值得买
  15. 【SAP】根据生产订单号查询序列号并导出序列号数据
  16. 区块链100讲:Truffle——一个更简单的部署智能合约的方法
  17. 分布式下载方式(二)DHT分布式网络
  18. angular 1 菜鸟教程
  19. DevOps《凤凰项目》实战沙盘演练将亮相光环中国·2017敏捷千人峰会
  20. ev3 中一键切换控制模式

热门文章

  1. 恒生电子实施怎么样_蓝思科技今年来涨幅超166%,消费电子主题基金如何挑选?...
  2. 处理器排行_垃圾处理器排行榜 适邦垃圾处理器榜上有名
  3. datagrid php json,thinkphp和easyui结合中,datagrid等容器获取json数据的方法
  4. sqlmap安装_黑客神器系列篇章之“sqlmapquot;
  5. 如何用python绘制灰度直方图_Python Opencv任意形状目标检测并绘制框图实例
  6. go语言变量声明、匿名变量
  7. android ndk 读短信,Android NDK之发送短信
  8. python手机号码正确编程_python 小练习之生成手机号码
  9. C语言二分法求最小值解,C语言用二分法求方程的近似解的方法
  10. python基本统计量_Python中简单统计量的计算