_masta_的 Win95 汇编教程 Part 0

原创 2001年06月24日 00:33:00

   -         
     -----=========-----
      -------==========================================----------
--------=====   _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,下一课见 ...

_masta_的 Win95 汇编教程 part 2

                          -                    -----=========-----           -------================...
  • SENDFREE
  • SENDFREE
  • 2001年06月24日 18:54
  • 718

_masta_的 Win95 汇编教程 Part 1

           -               -----=========-----      -------=========================================...
  • SENDFREE
  • SENDFREE
  • 2001年06月24日 18:53
  • 769

asm基础——使用nasm和bochs学习汇编

使用nasm得到二进制并使用boch来调试。
  • jiangwei0512
  • jiangwei0512
  • 2016年01月27日 22:32
  • 1486

GPU编程入门(8) GPU ASM 顶点渲染初步

看这个题目应该跟汇编有一定的关系吧。。。。唠叨句,可能有人觉得学游戏的,特别是现在高级语言那么多的情况下汇编的重要性已经很低了。。。错。。。为什么错,自己找书看去吧。。咔咔。。。看这篇文章多少要有点汇...
  • gamedevers
  • gamedevers
  • 2007年08月11日 21:04
  • 3250

内嵌汇编 %0,%1 是什么

使用内嵌汇编,要先编写汇编指令模板,然后将C语言表达式与指令的操作数相关联,并告诉 GCC对这些操作有哪些限制条件。例如在下面的汇编语句: __asm__ __violate__ ("movl %1...
  • ontheroad530
  • ontheroad530
  • 2016年01月01日 22:20
  • 1437

asm基础——使用nasm进行汇编(基础)

asm基础——使用nasm进行汇编(基础)
  • jiangwei0512
  • jiangwei0512
  • 2016年03月11日 23:32
  • 2909

解决 用VirtualBox安装Windows95后启动乱码

近来想怀念一下旧系统,就拿VBox去安装Win95了,先用DOS引导安装成功后进入欢迎界面就直接乱码了, 后来Google了一下发现了解决方案,原网址是:https://www.virtualbox....
  • Miss_kanagi
  • Miss_kanagi
  • 2014年03月02日 22:55
  • 965

Win32汇编基础教程

Win32汇编教程之一Win32汇编的环境和基础1.32位环境简介  在Dos下编汇编程序,我们可以管理系统的所有资源,我们可以改动系统中所有的内存,如自己改动内存控制块来分配内存,自己修改中断向量表...
  • t0nsha
  • t0nsha
  • 2008年03月27日 16:38
  • 2444

WIN95中日志钩子(JournalRecord Hook)的使用

      钩子是WINDOWS中消息处理机制的一个要点,通过安装各种钩子,应用程序能够设置相应的子例程来监视系统里的消息传递以及在这些消息到达目标窗口程序之前处理它们。钩子的种类很多,每种钩子可以截...
  • yemagxy
  • yemagxy
  • 2001年05月04日 22:22
  • 702

汇编程序中将通用寄存器置0的N种方法

方法1 mov eax, 0mov ebx, 0mov ecx, 0mov edx, 0 方法2 xor eax, eaxxor edx, edxxor ecx, ecxxor edx, ecx 方法...
  • Purpleendurer
  • Purpleendurer
  • 2009年04月03日 10:26
  • 2140
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:_masta_的 Win95 汇编教程 Part 0
举报原因:
原因补充:

(最多只允许输入30个字)