您的位置:首页精文荟萃破解文章 → 建立自己的动态链接库

建立自己的动态链接库

时间:2004/10/15 0:59:00来源:本站整理作者:蓝点我要评论(0)

 

     现在编程序,不用说,都是在调用别人做好的动态链接库中的函数,能不能编写自己的动态链接库呢?答案是肯定的!让我们开始吧!

;-------------------------------------------------------
;例:将EDX:EAX中的值转换成十进制输出形式字符串。
;文件名:MyDll.asm,这是动态链接库的源程序
;编译模式="DLL"   ;这是AoGo的最新版本MASM for EditPlus的要求,只需指明编译模式,则都只需要按Ctrl+1就能编译所有的模式,真是方便.
        .386
        .model flat,stdcall
        option casemap:none

include windows.inc

        .code
;DllEntry是动态链接库的入口,当动态链接库被加载/卸载时,或同一进程的线程生成/退出时,都会调用该入口函数
;当然,函数名不一定非是这个,但要和最后的End DllEntry保持一致。
DllEntry proc hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD
         mov  eax,TRUE  ;若返回FALSE,动态链接库就不会加载了
         ret
DllEntry Endp

;将EDX:EAX中的值转换成十进制输出形式字符串,很熟悉吧,前面的例子中有的!
OutEdxEax proc \            ;比如:EDX=0,EAX=01234567H,则转换后的字符串为:
  uses ebx esi edi,lpString ;        -> '19088743',0
        mov edi,lpString    ;指向存放结果的地址
        mov esi,lpString

        mov ecx,10          ;转换成十进制
        .while eax!=0 || edx!=0
            push eax    
            mov eax,edx
            xor edx,edx
            div ecx
            mov ebx,eax
            pop eax
            div ecx
            add dl,'0'      
            mov [edi],dl    ;存放结果
            inc edi
            mov edx,ebx
        .endw

        mov BYTE ptr [edi],0;字符串以0为结尾
        dec edi

        .while edi>esi      ;结果前变后,后变前!
            mov al,[esi]
            xchg al,[edi]
            mov [esi],al
            inc esi
            dec edi
        .endw
        ret
OutEdxEax endp
          end DllEntry
-------------------------------------------------------------------
;文件名:Mydll.def,要和MyDll.asm保存在相同的目录下
;模块定义文件,定义能被其它程序调用的函数名

LIBRARY   MyDll     ;动态链接库的名字
EXPORTS   OutEdxEax ;可被调用的函数名
-------------------------------------------------------------------
;文件名:MyDll.inc,函数声明

OutEdxEax   PROTO   :DWORD   ;一个缓冲区指针参数,用来存放转换后的子符串,注意缓冲区要足够存放结果。
-------------------------------------------------------------------
编译链接:

    用EditPlus打开文件MyDll.asm,执行“工具\编译&链接&运行”或直接用“Ctrl+1”,只要程序没输入错,就可看到编译后生成的文件。如下:

    D:\MASM7>dir mydll
    
     Volume in drive D has no label
     Volume Serial Number is 18F0-186B
     Directory of D:\MASM7
    
    MYDLL    ASM         1,675  02-17-03  21:12 MyDll.asm
    MYDLL    DEF            36  02-17-03  20:48 MyDll.def
    MYDLL    INC            28  02-17-03  21:28 MyDll.inc
    MYDLL    DLL         2,560  02-17-03  20:49 MyDll.DLL
    MYDLL    LIB         2,064  02-17-03  20:49 MyDll.lib
    MYDLL    EXP           516  02-17-03  20:49 MyDll.exp
             6 file(s)          6,879 bytes
             0 dir(s)   2,398,564,352 bytes free

    注意:将mydll.inc拷贝到\masm32\include目录下,将mydll.lib拷贝到\masm32\lib目录下,将mydll.dll拷贝到和程序相同的目录下或...。
-------------------------------------------------------------------
调用生成的动态链接库,看看效果怎么样吧!

;例:文件名:10.asm
;调用MyDll.dll,看能否正常工作

        .386
        .model flat,stdcall
        option casemap:none

include windows.inc

include mydll.inc
include masm32.inc
include kernel32.inc

includelib mydll.lib
includelib masm32.lib
includelib kernel32.lib

        .data?
CharOut db 100 dup(?)

        .code
start:        
    mov edx,12345678h
    mov eax,87654321h
    invoke OutEdxEax,addr CharOut   ;用我们自己的程序转换!
    invoke StdOut,addr CharOut
    invoke ExitProcess,NULL  
    end start

    用EditPlus打开文件10.asm,执行“工具\编译&链接&运行”或直接用“Ctrl+1”,就可看到执行的结果:1311768467139281697,对吗?
    


    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程