2017-01-18 68 views
-1

基本上我想通過添加運行時檢查 來執行調用者/被調用者映射,它在每個C/C++返回執行前檢查允許的範圍是 。將虛函數的所有返回映射到它們對應的返回地址

我有一個向前映射所有虛擬對象派遣到 允許的虛擬表項爲給定的類層次結構。 在LLVM LTO期間收集此數據。現在我想爲 所有的虛函數返回做同樣的事情。由於正向映射告訴 我應該可以訪問哪些函數,因此我需要確定按順序 來精確映射後面的以下信息。

  1. 從其中鏘/ LLVM得到返回地址包含在一個虛函數的每個 回報。在編譯期間是否有可能獲得 這個信息?

  2. 如何確定包含某個回報的函數。 接下來如何確定該函數屬於哪個類?

由於提前, 保羅

+0

1.當然不是:返回地址在運行時被壓入堆棧;在編譯時不可用。來自「簡明英漢詞典」我不能嘲笑這個問題。 – EJP

+1

請[編輯]你的問題,以顯示[你迄今爲止嘗試過的](http://whathaveyoutried.com)。您應該包含您遇到問題的代碼[mcve],然後我們可以嘗試幫助解決特定問題。你還應該閱讀[問]。 –

回答

0

是EJP你是正確的返回地址會在運行時推入堆棧,但每個返回下一步返回的地址給調用指令這是用於調用相應的函數,所以我在考慮,因爲每次返回必須在調用指令後繼續執行,那麼(調用指令後)應該是編譯期間可獲得的地址。

如果上述內容不如指令編譯器在每次調用指令後生成所需信息?

期待着我的文章有一個合格的精確答案。 :)