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
posted @ 2018-01-16 19:41  艾小小雨  阅读(234)  评论(0编辑  收藏  举报