相关疑难解决方法(0)

DYLD_LIBRARY_PATH和DYLD_INSERT_LIBRARIES无法正常工作

我创建一个.dylib文件并编译它:

#define _GNU_SOURCE
#include <dlfcn.h>
#include <stdio.h>

static void* (*real_malloc)(size_t);

void *malloc(size_t size)
{
    void *p = NULL;
    fprintf(stderr, "malloc(%zd) = ", size);
    p = real_malloc(size);
    fprintf(stderr, "%p\n", p);
    return p;
}

void __attribute((constructor))init()
{
    real_malloc = (decltype(real_malloc))dlsym(RTLD_NEXT, "malloc");
    if (NULL == real_malloc) {
        fprintf(stderr, "Error in `dlsym`: %s\n", dlerror());
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个调用的测试程序malloc.我确保对malloc的调用没有进行优化.

接下来我运行以下内容:

DYLD_PRINT_LIBRARIES=1 X=1 DYLD_INSERT_LIBRARIES=./libTestHook.dylib ./malloctest

它加载它但它根本不挂钩功能..任何想法?我在El Capitan升级之前尝试过这段代码并且它曾经工作过..我还让malloc抛出一个异常只是为了看它是否被调用.不是.

我错过了什么?

结果是:

sh-3.2# DYLD_PRINT_LIBRARIES=1 X=1 DYLD_INSERT_LIBRARIES=./libTestHook.dylib ./malloctest clear
dyld: loaded: /Users/Brandon/Desktop/./malloctest
dyld: loaded: ./libTestHook.dylib
dyld: loaded: /usr/lib/libc++.1.dylib …
Run Code Online (Sandbox Code Playgroud)

c macos osx-elcapitan

12
推荐指数
3
解决办法
7972
查看次数

标签 统计

c ×1

macos ×1

osx-elcapitan ×1