[英]How does ltrace (library tracing tool) work?
ltrace如何工作?
如何找到該程序的調用庫函數?
所有對庫函數的調用都具有通用的代碼路徑嗎? 也許ltrace在此通用代碼路徑中設置了斷點?
謝謝!
動態可執行文件具有一個符號表,供鏈接器在解析需要連接到庫函數的引用時使用。 (您可以通過運行objdump -T /path/to/binary
自己查看)。
該符號表也可以通過其他工具訪問,例如ltrace
,因此確定要鈎住哪些函數並單獨遍歷該列表很簡單。
請參閱Ottowa Linux Symposium 上有關ltrace內部結構的演講,其中提供了詳細的按功能分類的詳細信息。 要繼續閱讀源代碼,請參閱官方存儲庫或第三方github鏡像 。
一些較新的版本(比該討論要新的版本)還掛接了dlopen()
調用,以能夠跟蹤動態加載的庫的調用。 考慮一下,該機制應該相當明顯-如果可以用填充程序替換dlopen()
(當dlopen()
本身如上所述進行動態鏈接時),則可以在它返回的任何函數指針上設置一個斷點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.