mmapの追跡にdlsymを使用

dlsym mmap
mmapの追跡にdlsymを使用

私はいくつかのプログラムの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で1回印刷され、次にmmap1で再び印刷され、その後何も起こりません(プログラムはこの時点で停止するまで停止し、mmap2に到達することはありません)

dlsymについて読みましたが、これを引き起こす問題を見つけることができません。 もっと経験豊富な人からここに行きたいです。 ありがとう。

  1  0


ベストアンサー

タイトルとURLをコピーしました