学习LD_PRELOAD之摘抄
生活随笔
收集整理的這篇文章主要介紹了
学习LD_PRELOAD之摘抄
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
參考鏈接:https://www.cnblogs.com/net66/p/5609026.html
一、LD_PRELOAD是什么
LD_PRELOAD是Linux系統(tǒng)的一個環(huán)境變量,它可以影響程序的運行時的鏈接(Runtime linker),它允許你定義在程序運行前優(yōu)先加載的動態(tài)鏈接庫。 這個功能主要就是用來有選擇性的載入不同動態(tài)鏈接庫中的相同函數(shù)。通過這個環(huán)境變量,我們可以再主程序和其動態(tài)鏈接庫的中間加載別的動態(tài)鏈接庫, 甚至覆蓋正常的函數(shù)庫。一方面,我們可以以此功能來使用自己的或是更好的函數(shù)(無需別人的源碼),而另一方面,我們也可以向別人的程序注入程序, 從而達(dá)到特定的目的。二、程序調(diào)用流圖
- LD_PRELOAD替換前
????????
- LD_PRELOAD替換后
三、演示程序代碼
- 主程序
- 調(diào)用庫
四、程序編譯與試驗
- 演示流程圖
- 終端運行結(jié)果
五、替換庫代碼
六、替換并測試運行
- 替換流程圖
- 終端運行結(jié)果
七、LD_PRELOAD運用總結(jié)
- 定義與目標(biāo)函數(shù)完全 一樣的函數(shù),包括名稱、變量名稱、變量及類型、返回值及類型等
- 將包含替換函數(shù)的源碼編譯為動態(tài)鏈接庫
- 通過命令export LD_PRELOAD="庫文件路徑",設(shè)置要優(yōu)先替換動態(tài)鏈接庫
- 如果找不到替換庫,可以通過export LD_LIBRARY_PATH=庫文件所在目錄路徑,設(shè)置查找?guī)斓哪夸?/li>
- 替換結(jié)束,要還原函數(shù)調(diào)用關(guān)系,用命令unset LD_PRELOAD解除
- 想查詢依賴關(guān)系,可以用ldd 程序名稱
總結(jié)
以上是生活随笔為你收集整理的学习LD_PRELOAD之摘抄的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记录ishield遇到的问题的解决过程
- 下一篇: 学习并整理windows下编译nginx