2013-07-12 33 views
0

當調試加載了dlopen()的共享庫時,我發現一個有趣的事情。當從我的庫調用基於32位的函數時,返回的地址爲crypt();也就是說,當我嘗試在調試器中看到該地址時。它說這是一個不好的地址。在這個地址上添加一個移位,在我的例子中爲0xffffffff00000000給出了正確的結果。查看crypt源,很明顯,crypt返回的字符串是一個靜態char數組,但不清楚爲什麼該地址是基於32位的。由Solaris x64上的crypt()返回的地址不正確

預先感謝您的任何想法和幫助

回答

1

你有沒有#include <unistd.h>#include <crypt.h>在你的代碼,以便它有函數原型聲明crypt()爲返回char *

如果你沒有函數原型,C默認假設函數返回int,即使它在64位機器上只有32位,並且這往往會破壞返回指針的函數(這會偶然地工作32位系統,其中int與指針大小相同)。