06.openssl动态模块加载

6.1 动态库加载
动态库加载函数能让用户在程序中加载所需要的模块,各个平台下的加载函数是不一样。动态加载函数一般有如下功能:
a.加载动态库
比如windows下的函数LoadLibraryA;linux下的函数dloopen
b.获取函数地址
比如windows下的函数GetProcAddress以及Linux下的函数dlsym。
c.卸载动态库
比如windows下的函数FreeLibray和Linux下的函数close
6.2 数据结构
dso数据结定义在crypto/dso/dso.h
struct dso_st
{
DSO_METHOD *meth; 指出了操作系统的动态库操作函数
STACK_OF(void) *meth_data; 堆栈中存放了加载动态后的句柄
CRYPTO_REF_COUNT references; 引用计数,DSO_new的时候
int flags; 与加载动态库时加载的文件名以及加载方式有关, DSO_crt函数
CRYPTO_EX_DATA ex_data;扩展数据,没有使用
DSO_NAME_CONVERTER_FUNC name_converter; 当加载动态库是会待用DSO_convert_filename函数来确定所加载的文件。
DSO_MERGER_FUNC merger;
char *filename;
char *loaded_filename; 指明了加载动态库的全名。
CRYPTO_RWLOCK *lock;
}
对于flag操作命令:设置、读取和或的关系
#define DSO_CTRL_GET_FLAGS 1
#define DSO_CTRL_SET_FLAGS 2
#define DSO_CTRL_OR_FLAGS 3
#define DSO_FLAG_NO_NAME_TRANSLATION
#define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY
#define DSO_FLAG_NAME_UPCASE_SYMBOL
#define DSO_FLAG_GLOBAL_SYMBOLS
#define DSO_FLAG_NO_NAME_TRANSLATION:加载的文件名于制定的文件名一直,不加后缀.dll(windows)或.so(linux或unix)
DSO_FLAG_NAME_TRANSLATION_EXT_ONLY
加载的文件名讳加上lib串,比如用户加载eay32,真正加载时会加载libeay32
DOS_FLAG_UPCASE_SYMBOL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值