前言
前期准备
开发语言:MASM V10.0
工作环境:Windows XP/Vista/8/10
源程序的编辑器:
记事本(notepad.exe)用来编写汇编源程序
Visitual Studio 2015/2017/2019也是可以的
动态调试器:OllyDBG软件
静态调试器:W32DASM
字节码的阅读器和编辑器:
FlexHex/UltraEdit(下载地址)/WinHex
1.1 开发语言MASM32
MASM32是Steve Hutchessond在微软的不同产品基础上集成开发出来的汇编开发工具包,适合Win32编程环境的汇编语言,它主要用于基于Windows平台的32位汇编语言开发,是现在最流行的 Win32汇编开发包。与VC++和VB等高级语言相比,Win32汇编具有得天独厚的优势,这些优势主要体现在:
- 它摒弃了对系统细节的封装,更接近于系统的底层,从而使得编码更加灵活,能完成许多高级语言无法做到的事情(如代码重定位和特殊寄存器赋值等)。
- 它生成的可执行PE文件体积小,执行速度快。
- 它可用于软件的核心程序段设计,以提高软件的性能。
- 它能够直接接触系统的底层,所以使用它要远比使用VC++和VB等高级语言更适合开发与系统安全相关的程序。比如,与计算机硬件密切相关的驱动程序的开发、计算机病毒的分析与防治、软件加密与解密、软件调试、Windows PE研究等。
因此,学习Win32汇编对学习信息安全而言很有必要。MASM32是我们研究Windows PE的首选语言。
MASM32是一个免费的软件包,该软件包中包含了汇编编译器ml.exe、资源编译器rc.exe、32位的链接器link.exe和一个简单的集成开发环境( Intergrated DevelopmentEnvironment,IDE)QEditor.exe。为什么说MASM32是从其他产品集成出来的呢?这是因为软件包中的ml.exe来自Microsoft 的MASM软件包,rc.exe和 link.exe则来自Microsoft的Visual Studio。MASM32软件包还包括了详尽的头文件、导入库文件、例子文件、帮助文档和一些工具程序,如 lib.exe和dumpbin.exe等,后者被大家公认为最好的显示PE文件结构的工具。大家可以从网站 http://www.masm32.com/
上获得MASM32 SDK的最新版本,并可以在论坛里与来自世界各地的汇编爱好者交流技术和思想。
1.1.1 设置开发环境
可以选用vs作为开发工具
可详见我的博客[笔记]vs2015 编写汇编masm32 Helloworld
或者其他相关文章
下载安装masm
环境变量配置
include=masm32/include/;
lib=masm32/lib/;
path=masm32/bin/;
测试是否配置成功
运行cmd.exe->运行ml命令
1.1.2 开发第一个源程序HelloWorld.asm
配置
配置lib
配置include
代码
.386 ;CPU mode .model flat ,stdcall option casemap : none include windows.inc include user32.inc include kernel32.inc includelib user32.lib includelib kerne132.lib ;数据段 .data szText db 'Helloworld',0 ;代码段 .code main : invoke MessageBox,NULL,offset szText ,NULL,MB_OK invoke ExitProcess,NULL end main
1~6行是程序的注释;
7~10行定义了该汇编程序支持的基本特性;
11~16行引入了外部的动态链接库,在这些动态链接库里有程序需要的函数调用,这种调用方式符合程序代码重用的原则;
17~19行定义了这个程序中用到的数据;
20~25行则是程序的代码段,25行的伪指令“end start”告诉操作系统代码入口﹔最有用的代码行只有23行和24行,分别调用了user32.dll 动态链接库中的MessageBoxA函数和kernel32.dll动态链接库中的ExitProcess函数。
1.1.3 运行HelloWorld.exe
vs版本运行
run一下vs就成功显示
masm32运行
1.进入工作区
2.编译源文件
在当前工作区中输入命令
ml -c -coff Helloworld.asm
然后回车。
参数-c表示独立编译,不进行链接;
参数-coff表示编译后生成标准的COFF目标文件。
编译以后会在源文件所在目录生成一个与源文件同名的obj目标文件。
ml.exe是汇编语言的编译程序,它负责将汇编源程序编译成目标文件。该程序可接受的各参数的解释和描述如下所示:
3.链接目标文件与动态链接库
链接是为了将源文件中调用到的动态链接库中的函数的相关信息附加到可执行文件中。链接命令是:
link -subsystem:windows Helloworld.obj
参数-subsystem表示允许该代码运行的子系统。
如果没有错误,执行以上命令后会在源文件所在目录下生成最终的可执行文件HelloWorld.exe。链接程序的参数解释如下:
4.运行
Helloworld.exe
1.2 调试工具OllyDBG
大家可能对OllyDBG(简称OD)并不是很熟悉,但在软件破解领域,它却是与TRW2000和SoftICE等齐名的跟踪破解利器。熟练掌握OD的用法对我们以后研究EXE文件内部指令跳转、病毒分析、逆向工程与反病毒设计等有很大的帮助。那么,就让我们从调试HelloWorld.exe开始学习吧。
注意:下载需要关闭Windows实时保护