summaryrefslogtreecommitdiff
path: root/memcpy-helper.c
blob: 0d98c76e2cb9d8014528e2c8163c5a87f6b6226f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

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

static size_t memcpy_size = 0;
static size_t last_checkpoint = 0;

void *memcpy (void *dest, const void *src, size_t n)
{
    static void * (*real_memcpy) (void *, const void *, size_t) = 0;

    if (!real_memcpy) {
        real_memcpy = dlsym (RTLD_NEXT, "memcpy");
    }

    memcpy_size += n;

    if (memcpy_size - last_checkpoint > (1024*1024)) {
        fprintf (stderr, "memcpy total: %d\n", memcpy_size);
        //asm("int3");
        last_checkpoint = memcpy_size;
    }
    return real_memcpy (dest, src, n);
/*
    unsigned char *d = dest;
    unsigned char *s = src;
    while (n--) *d++ = *s++;
    return dest;
*/
}