0

でロードされた共有ライブラリをデバッグしているとdlopen()、興味深いことがわかりました。crypt()ライブラリから呼び出されたときに関数によって返されるアドレスは 32 ビット ベースです。つまり、デバッガーでそのアドレスを確認しようとしたときです。これは悪いアドレスだと言っています。このアドレスにシフトを追加すると、私の場合0xffffffff00000000は正しい結果が得られます。ソースを見ると、cryptによって返される文字列がcrypt静的な char 配列であることは明らかですが、アドレスが 32 ビット ベースである理由は明らかではありません。

どんなアイデアや助けにも感謝します

4

1 に答える 1

1

関数プロトタイプが戻り値として宣言されるように#include <unistd.h>#include <crypt.h>コードを作成しましたか?crypt()char *

関数プロトタイプを持っていない場合、C はデフォルトで関数が returnintであると仮定します。これが 64 ビット マシンで 32 ビットにすぎなくても、これによりポインターを返す関数が壊れることがよくあります (32 ビット システムでは偶然に動作します)。intはポインターと同じサイズです)。

于 2013-07-13T16:40:55.573 に答える