dlsym

    5熱度

    1回答

    我正在嘗試使用LD_PRELOAD機制來調用pthread_cond_broadcast。我插入的pthread_cond_broadcast函數只是調用原始的pthread_cond_broadcast。然而,對於pthread_cond_wait和pthread_cond_broadcast都被調用的非常簡單的pthread代碼,我最終會在glibc中得到一個段錯誤(對於glibc 2.11.

    4熱度

    2回答

    在Linux中。每對dlsym(3)Linux手冊頁, *Since the value of the symbol could actually be NULL (so that a NULL return from dlsym() need not indicate an error),* 這是爲什麼,當可在符號(函數,特別是)是實際NULL?我正在審查代碼,並找到一個使用dle

    0熱度

    1回答

    我想從動態庫中獲取函數符號,然後我需要使用新函數指針替換函數庫函數。代碼將被寫入C++文件。 我用下面的步驟, { void *temp = dlsym(<FLAGS>,<FUNC_NAME>); *reinterpret_cast<void**>(&real_mal) = temp; void *p = NULL; p = real_mal(size); return p; }

    1熱度

    3回答

    我有以下代碼,它只從當前目錄加載庫test.so,並在該庫中執行version函數。應該返回的是一個字符串。反而返回的是堆棧中的垃圾(指針位置可能?)。有誰知道爲什麼下面的代碼會失敗。 #include <stdio.h> #include <stdlib.h> #include <dlfcn.h> int main(int argc, char **argv){ void *h

    0熱度

    1回答

    1)。直接打印功能地址: printf("strerror=%p, strerror_r=%p\n", strerror, strerror_r); strerror=0x8049ec0, strerror_r=0x8049e20 2)。對dlsym版本: rtldDefault= dlopen(0, RTLD_NOW | RTLD_GLOBAL); dlsym(rtldDefault,

    1熱度

    1回答

    我已經使用dlopen加載對象,並使用dlsym來獲取指向共享對象函數的函數指針。一切正常。我已經測試了它的調用,然後共享函數(現在)只能打印並且工作 - 在主程序中調用它的打印效果很好。現在我想傳遞兩個參數給這個函數。一個int和一個char *。任何人都可以幫助我理解如何將參數傳遞給共享函數?我在網上搜索,但我不明白它是如何工作的。

    5熱度

    1回答

    是否有任何希望運行dlopen(NULL, ...)並獲取靜態編譯二進制文件的符號? 例如,如果程序是動態編譯的,並且使用-rdynamic,則使用以下代碼可以獲得符號。 $ gcc -o foo foo.c -ldl -rdynamic $ ./foo bar In bar! 但隨着-static我得到一個神祕的錯誤消息: $ gcc -static -o foo foo.c -ldl

    1熱度

    1回答

    我正在使用POSIX dlopen/dlsym API在運行時加載動態庫,然後通過名稱從這些庫調用函數。 在某處存儲dlsym的結果是一個好主意嗎?或者dlsym已經做了自己的緩存,並且會添加另一個圖層無用或者甚至是有害的?函數可能會被調用很多次,但我實際上並沒有辦法事先知道哪些函數或它們被調用的頻率。 謝謝!

    1熱度

    2回答

    我試圖用LD_PRELOAD攔截PyDict_New函數。我已經驗證了this recipe在python解釋器中使用了getpid,而我已經使用adapted it to use PyDict_New,但它並不像我期望的那樣工作。雖然我明確分配字典,並且必須使用此函數,但我的覆蓋不會被調用。 我在做什麼錯? 背景:我試圖在一個非常大的系統中調試問題。我發現有一個引用計數不好的字典。我知道字典首先

    39熱度

    4回答

    我有c++filt命令來去掉符號,什麼是做相反的工具和破壞符號名稱? 如果我想要調用dlsym()上一個錯位的C++函數名稱,這將會很有用。我寧願不要在代碼中硬編碼名稱,因爲隨着時間的推移,由於新的編譯器版本或新的編譯器品牌被使用,或者由於編譯多個平臺,目前它可能會改變。 是否有一種編程方式來獲取代表C++函數在運行時的字符串,以便代碼獨立於編譯器?一種可能的方法是在編譯時調用一個實用程序,爲正在