在调试加载了dlopen()
的共享库时,我发现了一个有趣的事情。crypt()
函数从我的库调用时返回的地址是32位的;也就是说,当我尝试在调试器中看到该地址时。它说这是一个糟糕的地址。添加到此地址的移位(在我的情况下为0xffffffff00000000
)会给出正确的结果。查看crypt
源代码显然crypt
返回的字符串是一个静态字符数组,但不清楚为什么地址是基于32位的。
提前感谢您的任何想法和帮助
答案 0 :(得分:1)
您的代码中是否#include <unistd.h>
或#include <crypt.h>
是否有函数原型声明crypt()
返回char *
?
如果你没有函数原型,C默认假设函数返回int
,即使在64位机器上只有32位,这通常会破坏返回指针的函数(这些函数有效)在int
与指针大小相同的32位系统上意外发生。