使用dlsym跟踪mmap

时间:2011-10-07 15:52:22

标签: mmap dlsym

我正在尝试测量一些程序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的内容,但我找不到导致此问题的问题。 我很想从更有经验的人那里来到这里。 感谢。

0 个答案:

没有答案