0

dlsym()デフォルトのライブラリ malloc の代わりに、自分のバージョンの malloc を呼び出していました。

 lt_malloc = (void*(*)(size_t))dlsym(RTLD_NEXT, "malloc");
 TRACE((stderr, "initialize: lt_malloc=%p\n", lt_malloc));
 if (!lt_malloc) {
     fprintf(stderr, "LeakTracer: could not resolve 'malloc' in 'libc.so': %s\n", dlerror());
     exit(1);
 }

一定時間後、タイマーかそこらかもしれませんが、元のバージョンのmalloc(libcライブラリmalloc)に戻したいと思います。どうやってやるの?

前もって感謝します。

4

2 に答える 2

0

むしろ、malloc 関数を含むライブラリで dlopen を使用し、dlopen からのハンドルを dlsym への最初の引数として使用する必要があります。

または、 LD_PRELOAD を使用できます。

于 2011-06-10T16:00:54.660 に答える
0

上記のコードは、1) malloc も malloc と呼んだことを意味しますか? 2) または libc malloc を lt_malloc に割り当てますか?

上記のコードは、lt_malloc が libc の malloc であり、「元の」malloc であることを示唆しています。おそらく、いくつかのマクロまたは関数のいずれかを持っているよりも

したがって、 my_malloc = libc_malloc my_malloc = my_debug_malloc と同じくらい簡単に切り替えることができます

そして、あなたは my_malloc を呼び出すだけです

それが役に立たない場合は、投稿されたコードと、「エンテ コードはこちら」で何を期待するかを説明してください。

于 2011-03-31T05:21:20.337 に答える