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