Win32汇编语言程序结构

 

Win32汇编语言程序结构

                                                                           默人整理  http://blog.csdn.net/HelloMei

.386 :指定使用的指令集

.model:定义程序的工作模式

.option casemap:none : 定义是否区分大小写

 

数据段:.data .data? .const

代码段:.code

堆栈段:系统自动分配堆栈空间(堆栈段内存属性是可读可写可执行,黑客方面缓冲区溢出技术)

 

end start:此处是程序的结束..入口就在start

 

;注释符号

 

API方面:

         Kernel32.dll 系统服务功能

         Gdi32.dll 图形设备接口

         User32.dll 用户接口服务

 

调用API:

1.       push..push..push….xxx….call…..

2.       invoke :masm编译器的伪指令

返回值永远放在eax..或数据或指针

调用的时候..函数原型必须声明

xxx proto aaa:dword, bbb:dword,…….

           在程序开头include 相关的文件可以省略此步

           Inc:声明函数原型

           Lib:Link时能到指定的文件中去找API函数的位置信息

 

标号:……->作用域是当前的子程序

标号::……->作用域是整个程序

 

当用@@做标号时:

@F:本条指令后的第一个@@标号

@B:本条指令前的第一个@@标号

 

变量:

         全局变量:

1,  定义在.data .data?

2,  数据类型(db,dw,dd,df,dq,dt…..

3,  Xxx type initvalue1, initvalue2…

4,  Xxx type repeatnum dup (initvalue1, initvalue2…)

5,  问号可以预留空间,实际运行的时候全部初始化为0

局部变量:(堆栈的出现)

                   1,定义:local xxx[repatnum]:type,…..

                   2,对局部变量一定要初始化

 

         变量的使用:

1,  类型不同:type ptr value

2,  sizeof :取得以字节为单位的长度

lengthof:取得数据的项数

3,  offset:取变量地址的伪操作符

对于局部变量..是用ebp来做指针操作的..编译时不确定..不能用offset来操作

addr: 对于局部变量只能用在invoke参数中

 

子程序

1,  定义

procName proc uses 寄存器列表,xxx:type..,VARARG

         local …..

         …..

procName endp

2,  不同语言调用方式(VARARG:表示参数的个数不确定)

syscall, stdcall : 从右入栈,子程序清除堆栈,允许使用VARARG

fortran,basic , pascal:从左入栈,子程序清除堆栈,不允许使用VARARG

c: 从右入栈,调用者清除堆栈,允许使用VARARG

 

条件测试语句:

         寄存器或变量 操作符 操作数

 

分支语句:

         .if 条件表达式1

                   ………..

         .elseif条件表达式2

                   ………

         .else

                   …………

         .endif

 

循环语句:

         1:

                   .while 条件表达式1

                            指令

                            [.break [.if 退出条件]]

                            [.continue]

                   .endw

         2:

                   .repeat

                            指令

                            [.break [.if 退出条件]]

                            [.continue]

                   until 条件表达式(或untilcxz 条件表达式)    :类似pascal那个repeat

 

命名:汇编

         1,匈牙利表示法

                   b : byte

                   w : word

                   dw : dword

                   h : Handle(句柄)

                   lp : 指针

                   sz : 0结尾的字符串

                   lpsz : 指向0结尾的字符串的指针

                   f : 浮点数

                   st : 数据结构

2,  全局变量在前面加_

         局部变量在前面加@

3,  在内部子程序的名称前面也加_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值