ARM GCC 庫打樁 符號替換

2021-09-26 21:37:52 字數 854 閱讀 8123

開發中,難免會遇到只有庫沒有原始碼的情況,除錯的時候,庫里的幾個函式又非常關鍵,那我們怎麼控制裡面的流程呢,並插入自己**?

這個時候就需要使用 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 來代替就可以了。...