WIN32汇编基础
WIN32汇编意思是基于WINDOWS32平台的汇编语言。其实任何编程语言都要有支持的平台(当然某些高级语言除外,象VB,VC这类语言并不算真正的高级语言,ANSI C才算真正的高级语言吧)为什么要学WIN32汇编呢?有下面几个理由
1。学WIN32汇编可以让你了解WINDOWS的运行原理。如窗口的消息过程,写多线程程序等。只要WINDOWS支持的,你就可以用WIN32汇编写出来。而这是VB类高级语言做不到的,因为他们都对WIN32的资源进行了封装,你是见不到窗口过程,消息处理的。而VC则好点,因为它封装少。
2。学WIN32汇编可以让你完全掌握程序的运行,掌握程序的每条指令。这样你写出的程序就会快的一塌糊涂,做到不写一条无用指令。
3.学WIN32汇编可以为你以后破解打下基础。
学WIN32汇编有什么难处呢?讲讲我的体会吧
1.学WIN32汇编要掌握必须的汇编指令,当然这对于一些人来说不是什么难处。但是对于不了解的人,建议到intel网站去看看,改天我发个intel指令集说明
2.学WIN32汇编经常要调用函数和各种资源,而这些函数的参数动辄就是8,9个参数,所以很麻烦。相信大家在VB下写程序都很轻松,那些参数不需要记忆的,在你输入函数名的前几个字符,它会自动搜索供你选择的,而且参数也会有提示,其实在WIN32汇编下有个IDE和它有相似功能,不错吧。而WINDOWS的资源更是多的不得了,所以要经常查看手册。
3.学WIN32汇编,在写程序的时候,一个简单的窗口程序就有几十行代码,这是可怕的,但是这是你选择WIN32汇编的代价,所以要坚持下来。其实以后写程序就可以在已有的程序添砖加瓦了。也相对简单多了。
好了,下面讲具体操作。在写程序的时候,当然要一个编程环境了。在一般情况下至少需要一个编译器和一个链接器。MASM32这个工具不错,有编译和链接工具,还有写编程必须的,有了它完全可以写出程序来。但是它不智能,所以我们就不用它,直接用MASMPLUS这个IDE,它是个不错的工具。在没发现这个工具的时候我都是手工,累死了。
工具地址:[url=http://bbs.pediy.com/showthread.php?p=162263]http://bbs.pediy.com/showthread.php?p=162263[/url]
安装一路NEXT就可以了。
好了,现在打开MASMPLUS,选择文件》新建,再选择.ASM就可以写程序了
[attach]17828[/attach]
下面我们来写第一个程序,一个弹出窗口的程序。很简单的,LET'S GO
输入下面的代码:
[code].386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.const
szCaption db 'www.hackerxfiles.net',0
szText db 'hehe',0
.code
start:
invoke MessageBox,NULL,ADDR szCaption,ADDR szText,MB_OK
invoke ExitProcess,NULL
end start[/code]
在选择编译》一步完成。这样就可以了,一个窗口程序弹出了
[attach]17829[/attach]
下面分析这段代码:
[code]
.386
.model flat,stdcall
option casemap:none
[/code]
一般的程序都要加上它,是声明的作用,
.386 表示用386处理器的指令集
.model flat,stdcall 表示用平坦的内存模式,可以用寻址4G的内存,STDCALL表示调用函数的模式,意思是采用从右向左的方式压入参数,并且由被调用者恢复堆栈。大家别管它,知道就可以了
[code]
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
[/code]
这段代码表示包含文件,在windows.inc中有所以的等值定义,user32.inc包含user32.dll所以函数的调用声明
user32.lib是函数调用的链接库。大家理解要调用函数必须包含声明和链接库就可以了
[code]
.const
szCaption db 'HEHE',0
szText db 'www.hackerxfiles.net',0
[/code]
这个是定义字符数据,当作函数调用参数用的
[code]
invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK
invoke ExitProcess,NULL
[/code]
是调用函数,invoke是伪指令,这些函数的参数都是WINDOWS自己定义的,可以查找相应的手册。在这个IDE中,会自己根据用户的输入自动给出,所以说这个IDE方便,呵呵
start:
end start:
和c中的main()有相同的作用,是告诉编译器这里是程序的入口。
写的不怎么好,大家将就着看吧。觉得好的就顶起来,觉得不好的就提出建议。看不懂的,可以回复,我会解答的
学WIN32汇编也有段时间了,写出来让不会的学习。
高手莫笑
要是大家觉得好的话,会继续写,否则就此打住了。
参考了罗云彬的书,和INTEL汇编语言程序设计,以及其他的一些书
页:
[1]
