0

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

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

4

1 回答 1

1

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

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

于 2013-07-13T16:40:55.573 回答