2011-07-06 25 views
0

環境: OS:Sun Solaris的10 處理器:AMD 64位的Solaris 64位的函數指針問題

我有一個使用的NET-SNMP庫的應用程序。該應用程序對於各種操作系統和處理器是便攜式的(代碼級別)在net-snmp中,你可以註冊一個記錄回調函數(一個函數指針),當要記錄什麼的時候會被調用。

問題是,當我運行應用程序時,它在seg-snmp嘗試調用我註冊的回調函數時發生故障。獲取註冊的回調地址是0xffe30b90,但net-snmp嘗試調用0xffffffff ffe30b90。

在調查過程中,我在同一個應用程序中編寫了另一個函數並進行了註冊。該函數被正確調用,但它的地址顯示爲0x52e060(無前導ff)。

我無法弄清楚這裏的問題是什麼。這似乎是與字節對齊或某些指針溢出問題有關的事情。

任何指針進一步調查將不勝感激。謝謝,

-Farooque

+0

進一步的調查顯示,更改源文件中的函數位置(進一步移動它),更改函數指針,我可以解決此問題。儘管如此,仍然沒有關於這個原因的線索。 –

回答

2

聽起來像是某個地址被穿過的帶符號的32位int,它得到轉換回64位時,符號擴展,增加額外的0xFFFF的...位。由於Solaris 64位ABI使用「LP64」約定,其中int爲32位,而long和指針爲64位,所以請確保您的代碼不會假設int與任何位置的指針大小相同。