博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
替换libc中的内存分配函数
阅读量:6840 次
发布时间:2019-06-26

本文共 1345 字,大约阅读时间需要 4 分钟。

hot3.png

摘要:

本文介绍如何替换glibc中的内存分配函数为自定义的内存分配函数的方法,可以方便调试内存分配,和查找内存管理错误而产生的问题。本文并不介绍如何实现内存管理,只是针对如何替换和替换Libc内存管理函数遇到的问题进行分析。

正文:

1. 问题提出

嵌入式Linux平台下开发的项目,通常都是使用glibc提供的内存管理。如果涉及到外购和合作开发,通常得到的都是lib,而这些lib也都是使用glibc进行内存管理。因为大规模操作内存,因此难免会出现内存泄露,访问越界等问题,针对于此很多前辈都开发了不少的检查工具,例如effence, dmalloc等等,这些都是替换掉libc的内存管理函数,以自己特殊的内存管理来查找内存方面引起的问题。同样我们也可以针对自己应用的特点写出内存管理函数并替换掉libc的内存管理函数。

2. 替换函数

实现以下函数来替换掉Libc中原有的内存管理函数如下:

extern “C” void *memalign(size_t align, size_t size){}extern “C” void *malloc(size_t size){}extern “C” void free(void *ptr){}extern “C” void *realloc(void *oldBuf, size_t newSize){}extern “C” void *calloc(size_t nelem, size_t elsize){}extern “C” void *valloc (size_t size){}

如果有用到C++实现以下函数:

void *operator new(unsigned int size){}void operator delete(void *ptr){}

3. 有关问题的解决

在使用动态链接libc的情况下,只用实现章节2中的函数即可。

在使用静态链接libc的情况下,因为malloc, free, realloc, memalign在glibc中没有以WEAK声明,因此静态链接无法替换掉这几个函数,会在链接过程中报重复定义,可采取以下两种方法处理:

a. malloc/free/realloc使用malloc hook的方法,不过这样代码要注意多线程安全

b. 将libc.a内的相关符号转换为weak

  • 找到链接使用的libc
  • ar x libc.a malloc.o            提取malloc.o
  • objcopy –W malloc malloc.o   符号weak
  • objcopy –W free malloc.o
  • objcopy –W realloc malloc.o
  • objcopy –W memalign malloc.o
  • ar –r libc.a malloc.o        将malloc.o替换回libc
  • 使用新的Libc.a进行链接即可

嵌入式上使用交叉编译器ar和objcopy前添加正确的前缀,例如arm-gcc-ar

结束语:

本文提供了在静态编译下libc下替换内存管理函数的方法,方便的替换自己的内存管理.

转载于:https://my.oschina.net/lgl88911/blog/147901

你可能感兴趣的文章
在npm发布自己的包
查看>>
「译」图解 ArrayBuffers 和 SharedArrayBuffers
查看>>
开源博客 - zblog简介篇
查看>>
从JS对象开始,谈一谈“不可变数据”和函数式编程
查看>>
Bootstrap 网格系统布局
查看>>
115 Distinct Subsequences
查看>>
charles配置移动web测试
查看>>
基于vue.js的图片预览组件2.0.1
查看>>
JavaScript 面试中常见算法问题详解
查看>>
一个自制的2048小游戏(2)
查看>>
面试面筋补充
查看>>
微服务架构适用场景分析
查看>>
脱离“体验”和“安全”谈盈利的游戏运营 都是耍流氓
查看>>
Oracle收购Talari,第一家SD-WAN公有云提供商出现
查看>>
可观察性驱动开发,探索未知之地
查看>>
Oracle弃用Nashorn JavaScript引擎
查看>>
OPPO大数据平台运营研发实践分享
查看>>
SAP开源Java SCA工具,提供静态代码安全性测试功能
查看>>
云计算怎么支撑起《流浪地球》的硬科幻实力?
查看>>
恶意软件盯上了加密货币,两家以色列公司受到攻击
查看>>