// libinterposers.c
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
typedef struct interpose_s {
void *new_func;
void *orig_func;
} interpose_t;
int my_open(const char *, int, mode_t);
int my_close(int);
static const interpose_t interposers[] \
__attribute__ ((section("__DATA, __interpose"))) = {
{ (void *)my_open, (void *)open },
{ (void *)my_close, (void *)close },
};
int
my_open(const char *path, int flags, mode_t mode)
{
int ret = open(path, flags, mode);
printf("--> %d = open(%s, %x, %x)\n", ret, path, flags, mode);
return ret;
}
int
my_close(int d)
{
int ret = close(d);
printf("--> %d = close(%d)\n", ret, d);
return ret;
}
输入 但是没效果先放到这里
haidragondeMacBook-Air:2-11 haidragon$ gcc -Wall -dynamiclib -o /tmp/libinterposers.dylib ./libinterposers.c
./libinterposers.c:15:26: warning: unused variable 'interposers' [-Wunused-const-variable]
static const interpose_t interposers[] \
^
1 warning generated.
haidragondeMacBook-Air:2-11 haidragon$ DYLD_INSERT_LIBRARIES=/tmp/libinterposers.dylib cat /dev/null
haidragondeMacBook-Air:2-11 haidragon$