我正在嘗試使用引腳編寫函數調用跟蹤器。它可以打印每個函數調用以及每個參數的值。英特爾引腳獲取函數參數號
一個困難是獲得一個函數的所有參數。使用RTN_InsertCall,你可以傳遞函數參數,以您的儀器代碼:
intel pin RTN_InsertCall multiple function arguments
但是,你需要知道當前程序的參數的個數。有沒有辦法做到這一點?
謝謝!
我正在嘗試使用引腳編寫函數調用跟蹤器。它可以打印每個函數調用以及每個參數的值。英特爾引腳獲取函數參數號
一個困難是獲得一個函數的所有參數。使用RTN_InsertCall,你可以傳遞函數參數,以您的儀器代碼:
intel pin RTN_InsertCall multiple function arguments
但是,你需要知道當前程序的參數的個數。有沒有辦法做到這一點?
謝謝!
在C中,類型信息不保存在二進制文件中。
在C++中,您可以嘗試使用函數的mangled名稱來確定參數的類型。但是,名稱修改不是標準的,並且通常在不同的編譯器之間不兼容。顯然,這裏沒有保證。
參見:
Is it possible to get the signature of a function in a shared library programatically?
你應該提供您是否有問題或不二進制調試符號的關鍵信息。如果您確實有可用的調試符號,那很簡單。有用於解析這些的標準庫。
如果您沒有調試符號,那麼它可能非常困難,而且基本上用像IDA Pro這樣的可視化探索工具更好。已經有一些關於自動查找剝離的二進制文件的函數簽名的研究(例如ftp://ftp.cs.wisc.edu/paradyn/papers/Jacobson11Unstrip.pdf),但是這個主題仍然很流行,無論您使用什麼工具,都會期望它在某個時候失敗,因爲問題最終是不可判定的,所有工具只是訴諸於以啓發式重構這些信息。 Chris Eagle的書(http://www.tinker.tv/download/idaPro_ch12.pdf)免費提供第12章涵蓋了IDA這樣做的方式。
謝謝。我希望Pin提供一些可以做我想做的API。 – ZillGate