免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5288 | 回复: 27
打印 上一主题 下一主题

Solaris 平台上怎么在系统malloc free时加入自己的代码? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-15 15:26 |只看该作者 |倒序浏览
在Linux上我用__malloc_hook 和 __free_hook,但是在solaris上找不到这样的接口。如果用LD_PRELOAD的话,我要用什么内存分配接口能避免无穷递归呢?

论坛徽章:
0
2 [报告]
发表于 2010-03-15 15:29 |只看该作者
在Linux上我用__malloc_hook 和 __free_hook,但是在solaris上找不到这样的接口。如果用LD_PRELOAD的话,我要 ...
jhzhu_snps 发表于 2010-03-15 15:26



    我想查阅solaris上C库的手册应该能找到答案。
    或者你自己封装个xxx_malloc, xxx_free,先执行你的代码,再调用malloc,free

论坛徽章:
0
3 [报告]
发表于 2010-03-15 15:40 |只看该作者
自己写libc

论坛徽章:
0
4 [报告]
发表于 2010-03-15 15:41 |只看该作者
递归还真是一个难以解决的问题

论坛徽章:
0
5 [报告]
发表于 2010-03-15 15:51 |只看该作者
我想查阅solaris上C库的手册应该能找到答案。
    或者你自己封装个xxx_malloc, xxx_free,先执 ...
zx_wing 发表于 2010-03-15 15:29



可能我没说清楚,我需要hack已经编译好的.o文件。也就是我不能改动调用malloc的代码,但要在分配和释放内存时执行一小段我自己的代码。

论坛徽章:
0
6 [报告]
发表于 2010-03-15 15:55 |只看该作者
递归还真是一个难以解决的问题
beingmaster 发表于 2010-03-15 15:41


呵呵,是啊,找了好几个库函数,发现最后都回到了malloc和free。
不会真的要去HACK这些函数的binary code吧.........

论坛徽章:
0
7 [报告]
发表于 2010-03-15 16:08 |只看该作者
回复 5# jhzhu_snps

有个办法我没试过,LZ有兴趣可以试试。
用objcopy工具,使用--redefine-syms将malloc、free改成你自己封装的xxx_malloc,xxx_free函数,这样所有的.o文件就用的是你的内存分配函数了

论坛徽章:
0
8 [报告]
发表于 2010-03-15 16:20 |只看该作者
回复  jhzhu_snps

有个办法我没试过,LZ有兴趣可以试试。
用objcopy工具,使用--redefine-syms将mallo ...
zx_wing 发表于 2010-03-15 16:08


嗯,我试了一下,这个在linux下可以的,我举个例子。

old.c
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main () {
  4.     char* s = malloc (6);
  5.     strcpy (s, "hello");
  6.     printf ("%s\n", s);
  7.     free (s);
  8. }
复制代码
编译生成old.o。我要将其中的malloc、free替换成xmalloc、xfree。

首先准备一个提供xmalloc和xfree的.o文件
xmalloc.c
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void* xmalloc (size_t size) {
  4.     printf ("Xmalloc called\n");
  5.     return malloc (size);
  6. }

  7. void xfree (void* ptr) {
  8.     printf ("xfree called\n");
  9.     return free (ptr);
  10. }
复制代码
gcc xmalloc.c -c生成xmalloc.o

然后准备一个符号替换文件syms
  1. malloc xmalloc
  2. free xfree
复制代码
对old.o使用objcopy,如下:
objcopy --redefine-syms=syms old.o new.o

再将生成的new.o和xmalloc.o链接在一起
gcc new.o xmalloc.o -o new

执行new得到结果:
Xmalloc called
hello
xfree called

替换成功

论坛徽章:
0
9 [报告]
发表于 2010-03-15 17:11 |只看该作者
回复 8# zx_wing


    在Linux下我也用过这个方案,不过在Solaris下不行,objcopy直接crash了。。。。。。。。。

论坛徽章:
0
10 [报告]
发表于 2010-03-15 17:15 |只看该作者
回复 9# jhzhu_snps


    汗。我想solaris下面应该有相应的工具的,LZ找找看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP