[英]How find absolute address of symbol of shared libraries?
我想寫一個小函數的跟蹤器。 我用ptrace。
當我看到CALL指令時,我想顯示相當於地址調用的函數名稱。
我的跟蹤器使用帶有絕對地址的符號(符號在主二進制文件中定義)。 但我不知道如何在虛擬內存中獲取共享庫函數的絕對地址。 例如,檢測對libc函數的調用。
我注意到共享庫中函數的地址是相對於文件的。
以下等式是否良好?
Absolute address of symbol = address of the shared library in virtual memory +
relative address of the symbol.
如何從共享庫中獲取符號的絕對地址?
我想你想看看動態鏈接是如何工作的,特別是全局偏移表。 http://www.gentoo.org/proj/en/hardened/pic-guide.xml是一個開始,但讓它在系統間可靠地工作可能會很棘手。
“連接器和裝載器”一書包含了這些問題的答案以及背景說明。 這可能值得一讀。 適用於ELF的內容並不適用於Windows,但本書同時涵蓋了 - 以及其他一些系統。
一旦您沒有描述您正在使用的系統, 本文就闡明了至少所描述的任務可以在某些情況下解決,而不是所有情況。
如果我在你的情況下,我會在內存和庫中搜索相應的二進制片段。 然后,只要內存和庫對齊,問題就解決了。 所以是的,只要不能將庫拆分並作為獨立部分加載,該等式就是好的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.