Я пытаюсь измерить, сколько памяти занимает программа mmaps.
Я использую следующий код:
void * mmap (void * addr, size_t len, int prot, int flags, int fildes, off_t off) {
printf("in mmap1\n");
static void *(*realfn)(void*, size_t, int, int, int, off_t)
= (void *(*)(void*, size_t, int, int, int, off_t))dlsym(RTLD_NEXT, "mmap");
printf("in mmap2\n");
void * result = (*realfn)(addr, len, prot, flags, fildes, off);
if ((int) result != -1) {
stats.add (len);
}
return result;
}
stats - это некоторая глобальная переменная, которая сохраняет статистику.
Я превращаю этот код в общий объект и связываюсь с ним. Для некоторых программ это работает, но для
некоторые программы, в mmap1 печатается один раз, затем в mmap1 печатается снова, а затем ничего
происходит (программа застревает на этом этапе, пока я не убью его, никогда не достигнув в mmap2.
Я читал о dlsym, но не могу найти проблему, вызывающую это.
Я бы с удовольствием сюда попал от кого-то более опытного.
Спасибо.