win32汇编入门(一)
基础结构
.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汇编入门(一)相关推荐
- Win32 汇编环境和入门程序图解
一 安装 在安装的最后,执行VBS脚本,在桌面建立快捷方式:执行快捷方式,会调入Win32汇编的编辑器qeditor.exe,进入到开发环境 二 构建Hello World程序 ;.386是伪指令 告 ...
- C指针原理(23)-win32汇编及.NET调试
2018-12-28 20:36:07 在WINDOWS系统能用到汇编的机会不多,基本都可以用C或C++代劳,更何况现在MICROSOFT的Visual Studio 系列工具非常强大,WINDOWS ...
- Win32病毒入门 -- ring3篇
Win32病毒入门 -- ring3篇 by pker / CVC.GB 1.声明 ------- 本文仅仅是一篇讲述病毒原理的理论性文章,任何人如果通过本文中讲述的技术或利用本文 中的代码写出恶性病 ...
- Win32病毒入门--ring3篇
Win32病毒入门--ring3篇 声明 一篇讲述病毒原理的理论性文章,任何人如果通过本文中讲述的技术或利用本文中的代码写出恶性病毒,造成的任何影响均与作者无关. 前言 病毒是什么?病毒就是一个具有一 ...
- 新版WIN32汇编开发环境介绍及RadAsm简明教程
写在前面的话: 在准备做教程的时候去查资料,关于WIN32下汇编方面的,本来想找些现成的拿到教程里用下,但发现貌似只有一篇,是2005年时jhkdiy写的,而且翻来翻去发现所有图片也都失效了.所以准备 ...
- Win32汇编WG系列教程1——《植物大战僵尸5211314》
开篇语: WG,一个很刺眼的名词,市面上大部分的挂都是使用VB/Delphi/C++或者E语言来写的,我之前也是使用Delphi和VB,这些语言的好处就是编写简单,容易入门!尤其 ...
- 【win32汇编】0x01 开篇一些乱七八糟的话
之前弄完了16位汇编,现在正式学习win32汇编,首先就是一些原理了,其实就是在16位的基础上增加了一些内容,其程序主要的结构记录如下 (1)指令集 .386 这是指定指令集 必须工作 ...
- Win32汇编_基础
Win32汇编_基础 包含全部段的源程序结构: .386 .model flat, stdcall Option casemap:none ;<一些include语句> .stack [堆 ...
- 选择“Win32汇编”的三大理由?
选择Win32汇编的理由是什么呢? 在DOS时代,学习汇编就是学习系统底层编程的代名词,仅要成为一名入门级的汇编程序员,就需要学习从CPU结构.CPU工作方式.各种硬件的编程方法到DOS工作方式等范围 ...
最新文章
- PCL特征点与配准(1)
- qstring 属于元数据类型吗_数据仓库的“元数据管理”
- tomcat升级后报错: Invalid character found in the request target.
- 20172319 实验二《树》实验报告
- Python 计算各类距离
- linux 返回上一个文件夹_常用命令之linux指令
- lvalue-xvalue-prvalue
- 一张图教你玩转阿里云双11上云狂欢节
- 2016年我的学习记录与搜索到的网站,将持续更新,主要介绍我在公司应用ecshop的学习记录...
- HTML元素居中的方法
- 通信教程 | USB、HDMI、DP接口及速度
- linux改d5000默认路径,linux相关指令和d5000基础操作.pdf
- Pubg九月十六日服务器维护,9月16日绝地求生更新时间公告 绝地求生9月16日更新维护...
- 音箱高音测试电脑软件,BOSE MusicMonitor电脑扬声器晒单 使用体验_什么值得买
- 【SAP】根据生产订单号查询序列号并导出序列号数据
- 区块链100讲:Truffle——一个更简单的部署智能合约的方法
- 分布式下载方式(二)DHT分布式网络
- angular 1 菜鸟教程
- DevOps《凤凰项目》实战沙盘演练将亮相光环中国·2017敏捷千人峰会
- ev3 中一键切换控制模式
热门文章
- 恒生电子实施怎么样_蓝思科技今年来涨幅超166%,消费电子主题基金如何挑选?...
- 处理器排行_垃圾处理器排行榜 适邦垃圾处理器榜上有名
- datagrid php json,thinkphp和easyui结合中,datagrid等容器获取json数据的方法
- sqlmap安装_黑客神器系列篇章之“sqlmapquot;
- 如何用python绘制灰度直方图_Python Opencv任意形状目标检测并绘制框图实例
- go语言变量声明、匿名变量
- android ndk 读短信,Android NDK之发送短信
- python手机号码正确编程_python 小练习之生成手机号码
- C语言二分法求最小值解,C语言用二分法求方程的近似解的方法
- python基本统计量_Python中简单统计量的计算