05.openssl内存分配

5.1 openssl内存分配
openssl供用户调用内存分配等函数主要在crypto/mem.c中实现,其那只的分配函数在crypto/mem_dbg.c中实现。默认情况下mem.c中函数mem_dbg.c中实现。如果用户的内存分配函数以及查找内存泄漏的函数,可以通过CRYPTO_set_mem_functions函数和CRYPTO_set_mem_debug_function函数来设置。
5.2 内存数据结构
struct app_mem_info_st {
CRYPTO_THREAD_ID threadid;
const char *file;
int line;
const char *info;
struct app_mem_info_st *next;
int references; 被引用次数
}
struct mem_st {
void *addr; 分配内存的地址
int num; 分配内存的大小
const char *file; 分配内存的文件
int line; 分配内存的行号
CRYPTO_THREAD_ID threadid; 分配内存的线程ID
unsgined long order;第几次内存分配
time_t time; 内存分配时间
APP_INFO *app_info;用于存放用户应用信息,为一个链表,里面存放了文件、行号以及线程ID等信息。
void *array[30];
size_t array_siz;
}
5.3 主要函数
a.CRYPTO_mem_ctrl
功能:本函数主要用于控制内存分配时,是否记录内存信息。如果不记录内存信息,将不能查找内存泄漏
参数:
CRYPTO_MEM_CHECK_ON
CRYPTO_MEM_CHECK_OFF
CRYPTO_MEM_CHECK_DISABLE
b.CRYPTO_is_mem_check_on
查询内存记录标记是否开启
c.CRYPTO_dbg_malloc
本函数用于分配内存空间,如果内存记录标记开启,则记录用户申请内存。当需要记录内存信息时,改函数本身也需要申请内存插入哈希表,为了防止递归申请错误,他申请内存记录信息钱必须暂时关闭内存记录标记,申请完毕在放开。
d.CRYPTO_dbg_free
释放内存,如果内存记录标记开启,还需要删除哈希表中对应的记录。
f.CRYPTO_mem_leaks
将内存泄漏输出到BIO中
g.CRYPTO_mem_leaks_fp
将内存泄漏输出到FILE中(文件或者标准输出),该函数调用CRYPTO_mem_leaks.
h.CRYPTO_mem_leaks_cb
处理内存泄漏,输入参数为用户自己实现的处理内存泄漏的函数地址。该函数值需要处理一个内存泄漏,openssl通过lh_doall_arg调用用户函数来处理所有记录(泄漏的内存)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值