本页使用了标题或全文手工转换

动态装载

维基百科,自由的百科全书
跳到导航 跳到搜索

动态装载英语:Dynamic Loading)是一种程序运行机制,能让计算机程序在运行时(而不是编译时)装载(或者其他二进制对象)到内存中,然后检索库中函数变量的地址,并运行这些函数或访问这些变量,且能在不需要时将库从内存中卸载。动态装载、静态链接动态链接(注意区分动态装载与动态链接的微妙差别)是复用其他软件代码的三种机制,不同于静态链接和动态链接,这种机制允许计算机程序在没有某些库的情况下启动,然后在运行的过程中发现可用的库从而获得额外的功能。

历史沿革[编辑]

动态装载早在1960年代的IBM/360操作系统中就已经广泛使用,尤其是在输入/输出子模块,以及COBOLPL/I运行时库中。装载的过程对于应用程序开发者是透明的,主要由操作系统或者输入输出子系统自动处理。这样做的好处有:

  • 修复子系统漏洞时只需要打一次补丁即可,而不需要重新链接
  • 程序库可以免于被胡乱修改而造成严重影响

IBM于1970年代开发的战略性事务处理操作系统CICS中,不仅在普通应用程序级别上使用了动态加载,甚至在内核级别都广泛采取这种机制,这使得用户可以在不用重启CICS操作系统的前提下,就可以对应用程序做任何级别的漏洞修复。

用法[编辑]

并非所有操作系统都支持动态装载。类UNIX操作系统通过C编程语言实现而成的dl库提供该类功能。在微软视窗操作系统采用Windows应用程序接口。

类UNIX系统[1][2] 视窗系统
申明 dlfcn.h windows.h
定义 libdl kernel32.dll
装载库 dlopen LoadLibrary
LoadLibraryEx
解析库 dlsym GetProcAddress
卸载库 dlclose FreeLibrary

参考资料[编辑]

  1. ^ dlfcn.h. The IEEE and The Open Group. [2013-12-15] (英语). 
  2. ^ David A. Wheeler. Program Library HOWTO. The Linux Documentation Project. 2003-04-11 [2013-12-15] (英语).