_masta_的 Win95 汇编教程 Part 0
-
-----=========-----
-------==========================================----------
--------===== _masta_的 Win95 汇编教程 Part 0 =====---------
-------==========================================----------
--==介绍==--
Hi, 当我在网络上苦苦寻觅基于 Win95 的汇编教程而一无所获时,我决定向大家
贡献出一点我自己的东西,并希望能够抛砖引玉。
--==我们需要什么?==--
1. 大脑 ;)
2. 一台装有 Win95 的计算机。(有一颗 INTEL 兼容的CPU)
3. TASM 5.0 (有 Tlink, 库文件, 等等 ...)
4. 一本 API 参考手册 (Win32.HLP) (PS: Sendfree说用 MSDN 就可以!)
---> 这些东西都能够从网上找到
[>Cracking.home.ml.org<]
--==预备知识==--
假设你已经具有汇编语言的基本知识了,这是一个 Cracker, Coder(变态的追求
Speed 的家伙) 所应当具备的。
-==我们要注意什么?==--
(和DOS的汇编相比)最主要的不同就是我们要使用 API 而不再是中断了。
API 函数执行以前我们要把参数 PUSH 到堆栈里面。它的运行有点像
C语言(最後一个参数先放进去,然后是倒数第二个...)...
此外,还有大小写的区别,一定不要搞错啊:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
要这样写: "MessageBoxA" <-------------> 而不是!!!: "messageboxa"
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--==在这篇教程中我们能够学到什么?==--
很简单!: 最流行的 "Hello World" -的显示 :-).
--==HELLO WORLD !!==--
大家都看到了,只有两个单词...
先想想看,怎么把它显示在屏幕上?我所作的仅仅是调用一下 MessageBox,
我们要充分利用 win95 的 32位的威力嘛,命令就变成了:"MessageBoxA".
翻开手边的 API 参考手册吧,开始查找 "MessageBoxA",查询的结果应该是:
---------------------------------------------------------------------
int MessageBox(
HWND hWnd, // 所属窗口的 handle (句柄)
LPCTSTR lpText, // 消息框中字符串的地址
LPCTSTR lpCaption, // 消息框标题的地址
UINT uType // 消息框的 style (风格样式)
);
---------------------------------------------------------------------
- 因为我们没有窗口,所以就把 "hWnd" 设为 0
- "lpText" 所要显示的文本的偏移地址 (放在哪里)
- "lpCaption" ---> 标题的偏移地址
- "uType" 设置也为 "0",意思是显示一个很普通的消息框,
就带着一个 OK 按钮的那种。(0就是 mb_ok 的类型码)
现在看看我们的源程序...
;-------------------------------START--------------------------tut.asm
; 设置一下编译器
.386P
Locals
jumps
.Model Flat ,StdCall
mb_ok equ 0 ;设置 mb_ok 为 "0"
hWnd equ 0
lpText equ offset text ;设置一个指向文本的指针
lpCaption equ offset caption ;设置一个指向标题的指针
; 声明一下所用到的 API 函数
extrn ExitProcess : PROC ;关闭一个进程的过程
extrn MessageBoxA : PROC ;显示消息框的过程
; 从这里开始放我们的数据
.Data
text db "Hello World",13,10 ; 文本的第一行(带换行的)
db "_masta_ greets everybody who reads this tut",0
; 第二行, 以 "0" 作为结束
caption db "Hello",0 ;标题, 以 "0" 作为结束
; 从这里开始放我们的代码啦
.Code
Main:
; 向世界问好 :))
push mb_ok ;PUSH uType 的值
push lpCaption ;PUSH Caption 的指针
push lpText ;PUSH Text 的指针
push hWnd ;PUSH Masterhandle
call MessageBoxA ;CALL MessageBoxA
CALL ExitProcess ;结束程序
End Main ;代码结束,Main 是整个程序的进入点
;-----------------------------------END------------------------tut.asm
;----------------------------------START-----------------------make.bat
tasm32 /mx /m3 /z /q tut
tlink32 -x /Tpe /aa /c tut,tut,, import32.lib
;-----------------------------------END------------------------make.bat
你看到啦,这段代码很短,但是我希望它将成为你学习 Windows 的汇编的良好开端。
--==最后的话==--
这时我第一个Windows汇编教程,但不是最后的...
Ok,下一课见 ...