任何獲取指令地址的方法? 我試圖用標籤來說明指令並獲取標籤的地址,但似乎它只能在GCC編譯器中與& &運算符一起使用。 (參考:this article)如果其他編譯器呢?獲取C/C++指令的地址
這個問題的任何想法?
任何獲取指令地址的方法? 我試圖用標籤來說明指令並獲取標籤的地址,但似乎它只能在GCC編譯器中與& &運算符一起使用。 (參考:this article)如果其他編譯器呢?獲取C/C++指令的地址
這個問題的任何想法?
我不確定C或C++語言標準是否提到了指令;你可以設想運行一個C程序,編譯成由一大羣人類奴隸執行(但即使標準符合,這也是不道德的)。你可以用鉛筆和紙自己運行一個簡單的小程序,你可以使用C解釋器等等......
一個優化的C或C++編譯器也可以將一些C語句翻譯成幾個機器指令位於不同的地方(尤其是編譯器可以執行內聯或克隆功能甚至是基本塊,甚至在源代碼中沒有任何inline
關鍵字)。
在大多數系統上,你可能需要處理代碼(例如在彙編中)一個例程,它返回一個指針值作爲其返回地址(即調用者的地址)。
使用GCC(以及兼容的編譯器,可能是Clang/LLVM),您可以使用__builtin_return_address和相關的內置函數。
Linux上的Gnu Libc爲您提供backtrace(但是當我嘗試時,我已經被它激活了)。
注意與-fno-frame-pointer
編譯時,這些技巧可能無法正常工作,您也可以考慮定製GCC例如插件或MELT擴展(MELT是一種領域特定的語言,作爲GCC的GPLv3插件實現,比使用C編碼的插件更容易擴展GCC)。您定製的GCC可能會在適當的地方插入調用儀器功能。
接近指令地址的唯一標準C或C++構造函數指針,我想這不是你的意思。然而,你可以完成你可能用gcc標籤值做的大部分工作,而不是指向包含必要代碼塊的函數的指針。
在C/C++中沒有其他選項。
注意:出路在這裏箱子..
你能已鏈接器生成一個包含應用程序對象(功能和數據)的(相對或其他方式)的地址映射文件?你的應用程序可以簡單地解析鏈接器映射文件...
在Linux上,'dladdr'爲你做了這個 - 參見'
你爲什麼問? – 2012-07-17 20:48:15
C++不需要執行指令。 – 2012-07-17 20:48:32
嗨巴西爾,我目前正在對指令/數據監視功能進行一些研究。 – nigong 2012-07-17 20:51:46