• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >汇编语言 > 制作动态链接库

制作动态链接库

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了c#制作动态链接库,如何制作动态链接库,动态链接库,动态链接库修复,动态链接库文件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

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

;-------------------------------------------------------
;例:将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,对吗?

</div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 制作动态链接库

相关文章

  • 2017-06-17伪操作
  • 2017-06-28事件对象在多线程编程中的应用
  • 2017-06-17条件汇编
  • 2017-06-28汇编源码系列之clock
  • 2017-06-28汇编源代码之获得操作系统版本
  • 2017-06-28汇编中使用打开对话框
  • 2017-06-28列表视图控件介绍
  • 2017-06-28汇编语言程序设计(二)
  • 2017-06-28汇编教程:汇编语言编程实例
  • 2017-06-28什么是动态链接库

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 汇编处理程序多重启动
    • 几种基本的逻辑运算
    • 汇编语言的艺术-观念正误(六)
    • 工具提示控件介绍
    • 汇编源码系列之burnout
    • 汇编源码系列之comint
    • 汇编源码系列之getsect
    • masm中宏指令的bug
    • 汇编源码系列之clean
    • VxD程序入门

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有