3 replies
很多時候,可能需要替換已有庫函式,或者對其庫函式進行修改。
為了避免對那些靜態鏈結庫或者動態鏈結庫檔案大動干戈,我們可以使用ld提供的–wrap選項。
例如,想把所有的malloc函式都作修改,以便讓malloc出的記憶體都是32位元組對齊的。
我們可以給ld傳選項「wrap=malloc」, 告訴ld,我們將替換名稱為malloc的函式。
接著再如下定義乙個新的malloc函式:
void * __wrap_malloc( size_t可以看到,程式中有個類似庫函式名稱的__wrap_malloc。size)
ld在遇到__wrap選項後,會使用__wrap_malloc函式名替換所有對malloc的呼叫。
並以此實現替換的作用。
那麼,如果還向呼叫原函式怎麼辦呢?
可以使用__real_malloc,這個函式名稱就對應了原來的malloc。
每次呼叫malloc時都列印生成的指標位址。
void * __wrap_malloc( size_t附完整程式:size)
#include編譯選項:#include
void * __wrap_malloc( size_t
size)
intmain ()
$gcc test_malloc.c -wl,--wrap=malloc
使用ld的wrap選項替換已有庫函式
很多時候,可能需要替換已有庫函式,或者對其庫函式進行修改。為了避免對那些靜態鏈結庫或者動態鏈結庫檔案大動干戈,我們可以使用ld提供的 wrap選項。例如,想把所有的malloc函式都作修改,以便讓malloc出的記憶體都是32位元組對齊的。我們可以給ld傳選項 wrap malloc 告訴ld,我們...
linux vi替換的使用
esc 命令模式與插入模式的切換 一 vi查詢 當你用vi開啟乙個檔案後,因為檔案太長,如何才能找到你所要查詢的關鍵字呢?在vi裡可沒有選單 查詢,不過沒關係,你在命令模式下敲斜桿 這時在狀態列 也就是螢幕左下腳 就出現了 然後輸入你要查詢的關鍵字 敲回車就可以了。如果你要繼續查詢此關鍵字,敲字元n...
gcc g 命令的經常使用選項
gcc g 命令的經常使用選項格式 選項 解釋 o file 指定輸出檔名稱。在編譯為目標 時,這一選項不是必須的。假設file沒有指定,預設檔名稱是a.out.c 僅僅編譯生成目標檔案,不鏈結 m486 針對 486 進行 優化。o0 不進行優化處理。o 或 o1 優化生成 o2 進一步優化。o3...