【问题标题】:Enable mtrace (MALLOC_TRACE) for binary program为二进制程序启用 mtrace (MALLOC_TRACE)
【发布时间】:2010-04-07 14:31:25
【问题描述】:

如何为没有源的二进制程序启用mtrace()(和MALLOC_TRACE env)?

mtrace 是 glibc 的特性:http://www.gnu.org/s/hello/manual/libc/Allocation-Debugging.html

谢谢

【问题讨论】:

    标签: malloc glibc mtrace


    【解决方案1】:

    mtrace.c

    #include <mcheck.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    
    
    void __mtracer_on () __attribute__((constructor));
    void __mtracer_off () __attribute__((destructor));
    void __mtracer_on ()
    {
        char *p=getenv("MALLOC_TRACE");
        char tracebuf[1023];
        if(!p)
            p="malloc_trace";
        sprintf(tracebuf, "%s.%d", p, getpid());
        setenv("MALLOC_TRACE",tracebuf, 1);
        atexit(&__mtracer_off);
        mtrace();
    }
    
    void __mtracer_off ()
    {
        muntrace();
    }
    

    使用gcc mtrace.c -fPIC -shared -o libmmtrace.so编译

    运行

    MALLOC_TRACE=echo LD_PRELOAD=./libmmtrace.so /bin/echo 42
    

    LD_PRELOAD=./libmmtrace.so /bin/echo 42
    

    你还好吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 2020-09-02
      • 1970-01-01
      • 2021-12-30
      • 2020-11-15
      相关资源
      最近更新 更多