Win32汇编开发_MASM32

来源:互联网 发布:淘宝信用贷款逾期一天 编辑:程序博客网 时间:2024/06/16 21:15

开发环境搭建

下载MASM32.exe

安装到C盘,只能到根目录,不能另指目录,但他不写注册表,可以安装后移动位置

编译源文件

1.使用EditPlus编辑*.asm源文件

2.源文件*.asm 使用ml编译成*.obj

3.界面资源文件*.rc使用rc编译*.res

4.使用Link 将*.obj,*res,连接成*.exe
5.使用OllyDebug调试*.exe 文件

这三个工具ml,rc,link在安装目录\masm32\bin中,需要指定Path路径

可以制作如下批文件,每次运时执行

--------------------------------------------------------------------------

@echo off
rem 请根据 Masm32 软件包的安装目录修改下面的 Masm32Dir 环境变量!
set Masm32Dir=C:\Program Files\masm32
set include=%Masm32Dir%\Include;%include%
set lib=%Masm32Dir%\lib;%lib%
set path=%Masm32Dir%\Bin;%Masm32Dir%;%PATH%
set Masm32Dir=
cmd
echo on

----------------------------------------------------------------------

基本用法如下例

ml /c /coff Test.asm                /c 只编译成obj  /coff  目前只支持COFF文件格式
rc Test.rc
Link /subsystem:windows Test.obj Test.res     /subsystem:windows 表示生成图形界面, /subsystem;console表示生成命令行程序 

可生成bat 文件

-----------------------------------------------------------

del Test.obj
del Test.res
del Test.exe
ml /c /coff Test.asm
rc Test.rc
link /subsystem:windows Test.obj Test.res

----------------------------------------------------------

调试时可以 反复执行

要点记录


问题2:test 与cmp区别与联系

test逻辑与运算结果为零,就把ZF(零标志)置1;

cmp 算术减法运算结果为零,就把ZF(零标志)置1.

常用法是

text ax,ax   //判断寄存器是否为空

jz   SomeWhare

问题3. C++ 调用约定


 问题4 函数调用后,使用栈传递参数

[ebp+8] 右边第一个参数[ebp+0c] 右边第二个参数 ... 



1.所谓领空,实际上是指:在某一时刻,CPU 的 CS:IP(EIP) 所指向的某一段代码的所有者所在的区域。

在OD中,可以使用Alt+F9 回到应用程序领空


容易混淆的汇编语法


 enter 指令 和 leave 指令

  子程序进入时,调用enter,返回前调用leave 相当于如下指令

  enter xxx  => push ebp

                push ebp,esp

                sub esp,xxx

  leave <==>    add esp,xxx

                pop ebp


  Eg:  lea eax,[]

  有关跳转指令,

   JCXZ(CX 为 0 则跳转)、

   JECXZ(ECX 为 0 则跳转);

  详解