#define _GNU_SOURCE #include #include #include char *strcpy(char *s1, const char *s2) { static char* (*real_strcpy)(char *, const char *) = NULL; if(!real_strcpy) real_strcpy = dlsym(RTLD_NEXT, "strcpy"); char *p = real_strcpy(s1, s2); fprintf(stderr, "============== strcpy(%p, %p) = %p\n", s1, s2, p); return p; } char *strncpy(char *s1, const char *s2, size_t n) { static char* (*real_strncpy)(char *, const char *, size_t) = NULL; if(!real_strncpy) real_strncpy = dlsym(RTLD_NEXT, "strncpy"); char *p = real_strncpy(s1, s2, n); fprintf(stderr, "============== strncpy(%p, %p, %d) = %p\n", s1, s2, (int)n, p); return p; } void *memcpy(void *s1, const void *s2, size_t n) { static void* (*real_memcpy)(void *, const void *, size_t) = NULL; if(!real_memcpy) real_memcpy = dlsym(RTLD_NEXT, "memcpy"); void *p = real_memcpy(s1, s2, n); fprintf(stderr, "============== memcpy(%p, %p, %d) = %p\n", s1, s2, (int)n, p); return p; } #if 0 void* malloc(size_t size) { static void* (*real_malloc)(size_t) = NULL; if (!real_malloc) real_malloc = dlsym(RTLD_NEXT, "malloc"); void *p = real_malloc(size); fprintf(stderr, "============== malloc(%d) = %p\n", size, p); return p; } #endif