基本概念都知道吗? TAG:lib dll 静态加载 动态加载

1〉导入库与静态链接库差别:导入库一般与dll一起使用,其中导入库包含编译或链接的信息,调用程序在编译和连接时均可以不需要dll的存在,在运行时,则通过导入库中导入到调用程序的信息,可以找到对应dll(导出对应的接口)文件名,进行外部调用;而静态链接库中,包含了符号信息和程序的二进制部分,并在编译的过程中提供符号定义,以及在链接时提供外部对象(.obj)的链接。动态链接库包含两种加载方式:静态加载时的静态库包含了相应文件PE头中的大部分信息,如FILE   HEADER,OPTIONAL   HEADER等。当link的时候,用来填充EXE文件的PE头,比如在IMAGE_IMPORT_DESCRIPTOR结构中相应dll的名字,引入函数的名字等。当PE   LOADER加载EXE的时候,dll也加载,通过引入表就可以知道相应引入函数的偏移地址并填充EXE的PE头。而动态链接时需要时才加载dll,通过引入函数名字直接搜索dll的引出表,得到相应RVA和Base   Address就可得到相应引入函数的偏移地址

2> 静态库与动态库的使用

a   如果想要讲第三方的源码包含其中的话,又不需要将第三方的代码生成一个独立的库,一般可以采用静态库的方法,这样就不容易暴露信息,呵呵。我的理解

b  静态调用与文件内函数调用一般,调用过程方便,将调用的接口放在一个统一的头文件下就可以了,所以一般项目目录下有include, lib, bin目录源于此。

c 动态链接库与调用程序是独立的,这样就可以很好的做到各自升级,保持接口不变就可以了;

d 静态链接时,每个调用程序均有一份静态库的副本,而动态链接库基本上可以做到共享一份副本,所以节省了空间。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值