C/C++編程筆記:什么叫做函數(shù)插入?帶你解析C語(yǔ)言中的函數(shù)插入
函數(shù)插入是將對(duì)動(dòng)態(tài)庫(kù)中函數(shù)的調(diào)用替換為對(duì)用戶定義的包裝器的調(diào)用的概念。

有什么應(yīng)用?
我們可以計(jì)算函數(shù)調(diào)用的次數(shù)。
存儲(chǔ)調(diào)用者的信息和傳遞給函數(shù)的參數(shù)以跟蹤使用情況。
檢測(cè)內(nèi)存泄漏,我們可以覆蓋malloc()并跟蹤分配的空間。
我們可以添加自己的安全策略。例如,我們可以添加一個(gè)策略,即不能以超過指定的遞歸深度調(diào)用fork。
功能如何設(shè)置?
任務(wù)是編寫我們自己的malloc()并確保在庫(kù)malloc()的位置調(diào)用了我們自己的malloc()。下面是一個(gè)驅(qū)動(dòng)程序,用于測(cè)試malloc()的不同類型的插入。

1、編譯時(shí)間:編譯源代碼時(shí),用我們自己的函數(shù)替換庫(kù)調(diào)用。

在Linux上執(zhí)行上述步驟:

2、鏈接時(shí)間:將可重定位目標(biāo)文件靜態(tài)鏈接以形成可執(zhí)行目標(biāo)文件時(shí)。

在Linux上執(zhí)行上述步驟:

3、加載/運(yùn)行時(shí)間:將可執(zhí)行目標(biāo)文件加載到內(nèi)存中,進(jìn)行動(dòng)態(tài)鏈接,然后執(zhí)行。
環(huán)境變量LD_PRELOAD為加載程序提供了要在命令或可執(zhí)行文件之前加載的庫(kù)列表。
我們創(chuàng)建一個(gè)動(dòng)態(tài)庫(kù),并確保在我們的hello.c可執(zhí)行文件之前加載了它。

在Linux上執(zhí)行上述步驟:

用戶定義的malloc的代碼應(yīng)保持較小,以提高可讀性。理想情況下,它應(yīng)該通過調(diào)用庫(kù)malloc()來(lái)分配內(nèi)存。
另外如果你想更好的提升你的編程能力,學(xué)好C語(yǔ)言C++編程!彎道超車,快人一步!
分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!

學(xué)習(xí)C/C++編程知識(shí),提升C/C++編程能力,歡迎關(guān)注UP一起來(lái)成長(zhǎng)!
另外,UP在主頁(yè)上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會(huì)對(duì)你有幫助的~
編程學(xué)習(xí)書籍分享:

編程學(xué)習(xí)視頻分享:
