在Solaris x64上crypt()返回的地址不正确

时间:2013-07-12 09:42:37

标签: 64-bit solaris crypt

在调试加载了dlopen()的共享库时,我发现了一个有趣的事情。crypt()函数从我的库调用时返回的地址是32位的;也就是说,当我尝试在调试器中看到该地址时。它说这是一个糟糕的地址。添加到此地址的移位(在我的情况下为0xffffffff00000000)会给出正确的结果。查看crypt源代码显然crypt返回的字符串是一个静态字符数组,但不清楚为什么地址是基于32位的。

提前感谢您的任何想法和帮助

1 个答案:

答案 0 :(得分:1)

您的代码中是否#include <unistd.h>#include <crypt.h>是否有函数原型声明crypt()返回char *

如果你没有函数原型,C默认假设函数返回int,即使在64位机器上只有32位,这通常会破坏返回指针的函数(这些函数有效)在int与指针大小相同的32位系统上意外发生。