Win32汇编_基础
包含全部段的源程序结构:
.386
.model flat, stdcall
Option casemap:none
;<一些include语句>
.stack [堆栈段的大小]
.data
;<一些初始化过的变量定义>
.data?
;<一些没有初始化过的变量定义>
.const
;<一些常量定义>
.code
;<代码>
;<开始标号>
; <其它语句>
end 开始标号
调用API:
push uType
push lpCaption
push lpText
push hWnd
call MessageBox
;MASM编译器的伪指令
invoke MessageBox, NULL, offset szText, offset lpCaption, MB_OK
函数的返回值:
一般放在eax中.如果返回的内容不是一个eax所能容纳的,一般是eax中返回一个指向返回数据的指针,或者用参数提供一个缓冲区地址,数据直接返回到缓冲区中去.
函数的声明:
函数名 proto [距离] [调用方式] [参数1]: 数据类型, [参数2]: 数据类型, …
参数名可以省略.
标号:
当在程序使用一条跳转指令的时候,可以用标号来表示跳转的目的地,在编译的时候会把它替换成地址,标号既可以定义在目标指令同一行的头部,也可以在目标指令前一行单独用一行定义.
标号: 目标指令 ;方法1
标号:: 目标指令 ;方法2
方法1(一个冒号),作用域是当前子程序,方法2(一个冒号),作用域是整个程序
@@:
当用@@做标号时,可以用@F和@B来引用它,@F表示本条指令后的第一个@@标号,@B表示本条指令前的第一个@@标号,程序中可以有多个@@标号,但@F和@B只寻找匹配最近的一个.