開發中,難免會遇到只有庫沒有原始碼的情況,除錯的時候,庫里的幾個函式又非常關鍵,那我們怎麼控制裡面的流程呢,並插入自己**?
這個時候就需要使用 gcc 工具重定義庫中的符號,然後在外面包裝該函式。
乙個庫:lib_test.a
庫中的函式:void hello_test_lib(void);
現在,我們想把庫裡面的hello_test_lib
函式替換為new_hello_test_lib
,需要以下步驟:
arm-none-eabi-objcopy lib_test.a lib_test_bak.a
arm-none-eabi-objcopy --redefine-sym hello_test_lib=new_hello_test_lib lib_test.a lib_test_bak.a
重定義符號,其實就是把庫里原來的函式名換成新的函式名,所以在函式呼叫關係上就多了一層。
上面的例子中,原來的呼叫關係假設如下:
void main(void)
那麼,重定義符號後,函式呼叫關係程式設計了如下所示:
void hello_test_lib(void)
void main(void)
在 main 函式中呼叫了庫里的函式hello_test_lib
,但是庫里的函式已經被我們重定義為了new_hello_test_lib
,所以,呼叫關係上,需要我們在外部實現乙個被替換的原來的函式介面hello_test_lib
。 Linux C 庫打樁技術
3.2.編譯命令 3.3.運 況和執行命令 3.4.說明 4.編譯時打樁 4.2.編譯命令和執行命令 4.3.運 況 4.4.說明 5.執行時打樁 5.2.編譯命令和執行命令 5.3.運 況 5.4.說明 6.參考資料 庫打樁技術,可以截獲對共享庫函式的呼叫。應用上可以如可以控制函式呼叫的輸入輸出值...
一文搞懂linux的庫打樁
linux下的鏈結器支援乙個強大的庫打樁 library interpositioning 允許你攔截對系統標準庫中某個目標函式的呼叫,取而代之執行自己的包裝函式。它可以給我們帶來兩個好處,一是通過新增某些語句,可以追蹤自己的程式對某些庫函式的呼叫情況 二是可以在你自己的程式中,對某些庫函式偷天換日...
替換jquer的預設 符號
在使用jquery的預設 符號時可能會產生衝突,可以替換預設的 符號,方法如下 var jquery jquery.noconflict jquery document ready function 大概意思就是把jquery的 換成jquery 然後平時用 的地方都用jquery 來代替就可以了。...