欢迎来到天天文库
浏览记录
ID:33489584
大小:136.04 KB
页数:5页
时间:2019-02-26
《基于操作系统的动态库分析及移植方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第!"卷总第""期西北民族大学学报(自然科学版)#$%&!",’$&(!))(年*!月!"#$%&’"()"$*+,-.*/%01-$.0*2("$)&*0"%&’0*0-(.’+,-.+%/012302)420,!))(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!基于操作系统的动态库分析及移植方法曹玉林*,马建萍!(*&西北工业大学软件学院,陕西西安5*))6";!&青海师范大学,青海西宁7*)))7)""""""""""""""""""""""""""""""""""""""""""""[摘要]在操
2、作系统中都有动态库的概念,而采用动态库可以有效地减少应用程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理8但不同系统的动态库实现机制不同、格式不同,在不同操作系统调用时要进行动态库程序移植8分析和比较两种操作系统动态库技术,并将#9::编制的动态库移植到;13-<上8[关键词]动态库;函数;进程;操作系统;移植[中图分类号]=>?*@[文献标示码]A[文章编号]*))@B!*)(!!))())(B))"!B)(自从微软推出*6位的C13D$EF操作系统起,每种版本的C13D$EF操作系统都非常依赖于动态连接库(4G3+H10;13I;1J.+.G+JJ.,4;;)
3、中的函数和数据8实际上C13D$EF操作系统中几乎所有的内容都由4;;以一种或另外一种形式代表着,例如显示的字体和图标存储在K4L4;;中、显示C13D$EF桌面和处理用户的输入所需要的代码被存储在一个MF2.4;;中、C13D$EF编程所需要的大量的A>L函数也被包含在N2.32%4;;中8动态库技术是程序设计中经常采用的技术8其目的减少程序的大小,节省空间,提高效率和灵活性8采用动态库技术对于升级软件版本更加容易8与静态库(/,+,10;13I;1J.+.G)不同,动态库里面的函数不是执行程序本身的一部分,而是根据执行需要按需载入,其执行代码可以同时在多个程序中共享8在C13
4、D$EF和;13-<操作系统中,都可采用这种方式进行软件设计,但他们的调用方式以及程序编制方式不尽相同&本文首先分析了在这两种操作系统中通常采用的动态库调用方法以及程序编制方式,然后比较分析了这两种方式的不同之处,最后根据项目中的实际移植程序经验,找出了将#9::编制的C13D$EF动态库移植到;13-<下的方法834;;(4G3+H10;13I;1J.+.G)技术*&*C13D$EF4;;技术动态连接库是实现C13D$EF应用程序共享资源、节省内存空间、提高使用效率的一个重要技术手段,是建立在客户O服务器通信的概念上,包含若干函数、类或资源的库文件,函数和数据被存储在一个4;;
5、(服务器)上并由一个或多个客户导出而使用8这些客户可以是应用程序或者是其他的4;;8常见的动态库包含外部函数和资源,也有一些动态库只包含资源,如C13D$EF字体资源文件,称之为资源动态连接库8通常动态库以&D%%,&D.P、&Q$3等作为后缀8相应的C13D$EF静态库通常以&%1J结尾,C13D$EF自己就将一些主要的系统功能以动态库模块的形式实现84;;库不同于静态库,在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为#&;LR),#1F-+%9::的编译器在处理程序代码时将从静态库中恢复这些函数和数据,并把他们和应用程序中的其他模块组合在一起生成可执行文件8这
6、个过程称为“静态连接”,此时因为应用程序所需的全部内容都是从库中复制出来,所以静态库本身并不需要与可执行文件一起发行8在动态库的情况下,有两个文件:一个是引入库(&;LR)文件,一个是4;;文件8引入库文件包含被4;;导出的函数的名称和位置,4;;包含实际的函数和数据,应用程序使用;LR文件连接到所需要使用的4;;文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是4;;中所要调用的[收稿日期]!))(B**B!)[作者简介]曹玉林(*@5)—),男(藏族),青海化隆人,讲师,在读硕士研究生,研究方向为数据库与网络8—"!万
7、方数据—函数的内存地址!这样当一个或多个应用程序运行时再把程序代码和被调用的函数代码连接起来,从而节省了内存资源!由此可知,"##和$#%&文件必须随应用程序一起发行,否则应用程序将会产生错误!’()*+,-动态库在运行时被系统加载到进程的虚拟空间中,使用从调用进程的虚拟地址空间分配的内存,成为调用进程的一部分!"##也只能被该进程的线程所访问!"##的句柄可以被调用进程使用;调用进程的句柄可以被"##使用!"##模块中包含各种导出函数,用于向外界提供服务!"##可以有自己的数据
此文档下载收益归作者所有