我已經使用dlsym()
調用我的版本的malloc,而不是默認的庫的malloc:Ç - >的malloc - >對dlsym
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)。我怎樣才能做到這一點?
在此先感謝。
@Friedrich:請參考dlsym的手冊頁,尤其是使用宏RTLD_NEXT。是的,我們有我們自己的malloc代碼,在將被調用的程序中。 – kingsmasher1 2011-03-31 05:38:27
我知道dlsym做什麼,所以lt_malloc是libc malloc。那麼你的malloc在哪裏呢?什麼是名稱以及如何通過宏或其他函數指針調用它,或者如何調用它? – Friedrich 2011-03-31 06:06:50
不,我認爲在這種情況下,您需要更好地瞭解宏RTLD_NEXT。我將在這裏複製粘貼從手冊頁中的一個例外:'有兩個特殊的僞句柄,RTLD_DEFAULT和RTLD_NEXT。前者將使用默認庫搜索順序查找所需符號的第一個匹配項。後者將在當前庫之後的搜索順序中查找下一個函數。這允許在另一個共享庫中的函數週圍提供一個包裝。' – kingsmasher1 2011-03-31 06:09:45