2009-08-20 206 views
2

在gcc中使用儀器功能標誌,您可以在每次執行某個功能之前和之後測試代碼以執行功能。 這些函數是__cyg_profile_func_enter和__cyg_profile_func_exit,帶有兩個參數,即當前函數的地址;輸入的第二個參數是呼叫站點的地址,並用於退出它返回的地址。如何使用__cyg_profile_func_exit獲取返回值?

有沒有辦法獲得儀表功能實際返回的值?

+0

這將取決於返回類型......我想知道我是否正確理解你的問題。 – AProgrammer 2009-08-20 18:51:57

+0

你想檢索被檢測函數返回的值嗎?準確地說是 – philant 2009-08-20 19:35:02

+0

。我儀器的功能,我想什麼它實際上返回 – LB40 2009-08-20 19:48:36

回答

1

據我所知(爲了得到返回值,我決不會引用我的)返回值,使用__cyg_profile_func_exit我們需要將我們的優化標誌設置爲-O0,iirc,它不適用於度因爲-O0將返回值存儲在ebx中,並且較高優化標記將返回值存儲在eax中;之後致電eip。因此,爲了避免ebx被儀表功能所殺,我們在進入功能時保存它,並在我們分開時恢復它。

我希望這會有所幫助,祝你好運。

+0

然後我只看ebx的上下文? – LB40 2009-08-20 20:13:41

+0

是的。在-Ob標誌被設置之前,在ebx彈出之前,你應該得到類似於:mov 0xfffffffb(%ebp),%eax。在這裏,返回碼將eax的內容(我們的返回值)複製到ebx中。簡單到足以理解。 – amaterasu 2009-08-20 20:20:13

+0

我不想這麼低...廢話 – LB40 2009-08-20 21:03:58