1

我正在尝试测量一些程序 mmap 有多少内存。我正在使用以下代码:

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 的信息,但找不到导致此问题的问题。我很想从更有经验的人那里来。谢谢。

4

0 回答 0