2013-03-18 50 views
2

我正在使用英特爾引腳來測試C++可執行文件並報告感興趣的事件(例如,某些函數調用,線程創建/完成等)的多處理器體系結構模擬器。基本上,我構建了一個指令解碼緩存,當它們的圖像被加載時,所有的指令都被緩存,然後分析指令的執行。因此,映像加載時的指令地址在運行時與指令地址相同(或至少與指令地址同步更新)是很重要的。目標代碼重定位和英特爾引腳交互

英特爾引腳API(例如,IMG_AddInstrumentFunction)使我獲得有關加載的圖像信息(可執行文件和共享庫),如入口點,低/高地址等

然而,我注意到,儀表程序在不屬於任何加載圖像的地址執行指令。通過檢查,我懷疑動態加載程序(使圖像/lib64/ld-linux-x86-64.so.2 64位的Centos 6.3)通過調用例程_dl_relocate_object重新定位在存儲器中的主可執行。

我明白需要重定位代碼和所有東西。我只需要指向一個很好的文檔(或簡單的描述/建議),指出這些重定位可能發生的方式/時間(在加載時和運行時),以便我可以在我的架構模擬器中考慮它們。換句話說,用於實現它的函數(如果有任何可用於抑制重定位的g ++編譯器開關等,我需要的函數庫,條件或可能是隨機的函數庫)。我只針對x86/x86_64體系結構

回答

4

重定位是特定於處理器的,所以ARM和x86-64和x86有不同的重定位(因爲它們的指令集不同)。

重定位也是操作系統特定的,但是一些相關的操作系統嘗試具有相同的重定位,例如, Solaris和Linux爲x86-64的

它們詳細描述於ABI(應用二進制接口)規範「System V應用程序二進制接口AMD64架構處理器補充」說明。原來的x86-64 ABI曾經是http://www.x86-64.org/documentation.html ,但該網站幾周以來沒有迴應。舊副本是this link,並有一個更新here

也有X32 ABI

參見this question

+0

謝謝,巴西爾。由於我的選票少於15票,我仍然無法提出您的答案。 – 2013-03-18 07:15:09