簡體   English   中英

如何找到共享庫的符號的絕對地址?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM