2009-08-12 69 views

回答

0

在最低級別,如果您模擬機器上運行的函數,那麼它將從寄存器或未寫入的堆棧中讀取一些信息。如果您將這些讀數與平臺的ABI進行比較(您不會說是Sparc Solaris還是Intel Solaris),那麼其中一些應該對應於函數參數的寄存器/堆棧位置。當然,不能保證函數會讀取所有的參數。

對於Solaris,elfdumpnm(快速谷歌爲elfdump簽名表明請求,並且支援,但你需要檢查你有什麼版本)可能會給出更多的信息

+0

感謝皮特, 是完整的,如果我們可以運行程序,然後pstack運行過程可以顯示一個函數的參數個數並顯示這些參數的值。 – Daniel 2009-09-06 08:52:46

1

假設這是C代碼,則沒有有沒有 - 在 編譯器/鏈接elides該信息。如果它是C++代碼,則可能會保留該函數的損壞名稱並且包含編碼形式的參數。

3

號尼爾·巴特沃思的建議審查該函數簽名是一個很好的一個C++(因爲參數經常編碼成功能,使鏈接器可以告訴"int x(int)""int x(float)"例如之間的差異),但對C,你將不得不弄髒你的手並拆開這個功能,特別要注意堆棧框架是如何在你的環境中構建和使用的。

請記住,SPARC有一個旋轉窗口堆棧,而不是常規的堆棧。你真的要深入研究CPU的工作方式。如果您正在與Intel討論Solaris,當然,旋轉堆棧不在那裏。

0

IDA Pro的(http://www.hex-rays.com/idapro/ )是一個反彙編程序,它在從目標代碼中推斷函數參數時非常聰明; 也許你也可以使用符號信息;例如。在Win32符號_function @ 8揭示了8個字節(2個參數)傳遞 一個還可以解碼C++的名字來獲取參數和類型

相關問題