2011-07-06 12 views
0

環境: OS:Sun Solarisの10 プロセッサ:AMD 64ビットのSolaris 64ビット関数ポインタの問題

I NET-SNMPライブラリを使用するアプリケーションを持っています。アプリケーションは、さまざまなOSやプロセッサに移植可能です(コードレベル)。 net-snmpでは、何かがログに記録されるときに呼び出されるロギングコールバック(関数ポインタ)を登録できます。

問題は、私がアプリケーションを実行すると、net-snmpが私が登録したコールバック関数を呼び出そうとするときに、segフォールトが発生することです。登録されるコールバックアドレスは0xffe30b90ですが、net-snmpは0xffffffff ffe30b90を呼び出そうとします。

調査中、同じアプリケーションに別の機能を書き込んで登録しました。その関数は適切に呼び出されますが、アドレスは0x52e060(先頭にffはありません)と表示されます。

私はこの問題が何であるか把握できません。これは、バイト整列やいくつかのポインタのオーバーフローの問題に関連しているようです。更なる調査のための指針が理解されるであろう。おかげで、

-Farooque

+0

詳細な調査では、ソースファイル内の関数の位置を変更すると、関数のポインタが変更され、この問題を回避できます。それでも理由はまだありません。 –

答えて

2

どこアドレスが0xFFFFの余分...ビットを追加して、符号拡張バックに64ビットの変換時に取得する符号付き32ビット整数として通過されているように聞こえます。 Solarisの64ビットABIではintが32ビットで、ポインタは64ビットであるため、intはポインタと同じサイズであるとコードで保証されていないことを確認してください。

関連する問題