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