2013-07-12 2 views
0

При отладке разделяемой библиотеки, загруженной dlopen(), я нашел интересную вещь. Адрес, возвращаемый функцией crypt() при вызове из моей библиотеки, основан на 32 битах; то есть, когда я пытаюсь увидеть этот адрес в отладчике. он говорит, что это плохой адрес. Добавляя к этому адресу сдвиг, который в моем случае 0xffffffff00000000 дает правильный результат. Глядя на источники crypt, понятно, что строка, возвращаемая crypt, представляет собой статический массив символов, но непонятно, почему адрес основан на 32 битах.Неверный адрес, возвращаемый crypt() на Solaris x64

Спасибо заранее для любых идей и помочь

ответ

1

ли вам #include <unistd.h> или #include <crypt.h> в вашем коде, так что он имел прототип функции объявляющий crypt() как возвращение char *?

Если у вас нет прототипа функции, C по умолчанию принимает функции return int, даже если это только 32-разрядные бит на 64-разрядной машине, и это часто нарушает функции, которые возвращают указатели (которые работают случайно на 32-битные системы, где int - тот же размер, что и указатель).