используя dlsym для отслеживания mmap - PullRequest
1 голос
/ 07 октября 2011

Я пытаюсь измерить, сколько памяти занимает программа 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, но не могу найти проблему, вызывающую это. Я бы с удовольствием сюда попал от кого-то более опытного. Спасибо.

...