Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在调试加载的共享库时dlopen(),我发现了一个有趣的事情。crypt()从我的库中调用时函数返回的地址是基于 32 位的;也就是说,当我尝试在调试器中查看该地址时。它说这是一个错误的地址。在我的情况下,向这个地址添加一个转变会0xffffffff00000000给出正确的结果。查看crypt源代码很明显,返回的字符串crypt是一个静态字符数组,但不清楚为什么地址是基于 32 位的。
dlopen()
crypt()
0xffffffff00000000
crypt
提前感谢您的任何想法和帮助
您#include <unistd.h>或#include <crypt.h>在您的代码中是否将函数原型声明crypt()为返回char *?
#include <unistd.h>
#include <crypt.h>
char *
如果您没有函数原型,C 默认假设函数 return int,即使在 64 位机器上这只是 32 位,这通常会破坏返回指针的函数(在 32 位系统上意外工作int与指针大小相同)。
int