关于利用malloc hook的方法跟踪内存分配工具的设想
时间:2007-04-13 来源:loughsky
在做程序调试的时候,内存的管理占据了很大的一个部分。
主要面临以下的几个问题:
1、内存泄露,导致系统内存耗尽。
2、内存占用很大,不知道内存都用在什么位置了。
3、访问内存错误,导致SIGEVG错误,程序崩溃。
计划采用的技术:
1、通过injectso方法,注入malloc hook,对于内存的分配和回收,记录log,撰写工具,对特定的log进行分析。从而总结什么内存没有释放。同时,使用dwarf开发包,将运行的指针找出对应的代码行,方便分析。
2、通过injectso方法,注入针对特定信号的处理程序,在程序中打印出其堆栈,以方便排查错误。
3、将malloc的钩子函数,以及signal的处理程序,统一编译成动态链接库的方式,方便使用injectso。
4、针对嵌入式的特点,记录的log将主要打印在输出窗口,以提高速度,及少占用系统硬盘资源。
5、目前injectso,主要是在程序运行之后,进行attach,这样的好处在于其所依赖的so库都已经load进入内存,并且已经建立了link_map.
而我们要在一开始就要跟踪程序,所以ptrace(PTRACE_TRACEME, 0, NULL, NULL);exec(program)之后,需要通过symbol表找到main所对应的地址,然后在该地址插入断点,从而在程序运行到main的时候,获得控制权,开始注入各种方法。
相关阅读 更多 +