【发布时间】:2013-12-13 00:14:07
【问题描述】:
我在 Linux (test.so) 上使用 gcc 构建了一个共享库 代码当然是PIC。
其中一个 test.so API 调用返回一个指向共享库堆栈上的结构的指针和另一个调用 返回指向共享库数据段上结构的指针。
当我从共享库中获取这些指针后尝试访问它们时,我得到一个 SEGFAULT。
我的问题是:
堆栈地址应该始终有效(因为它们被计算为对 SP 的偏移量)那么为什么我会得到 SEGFAULT?
-
对于全局地址,如果我在库中访问它们,编译器会使用动态加载器给出的基值来解析它们,但是如果我这样做会发生什么:
返回 &x
编译器是返回解析地址还是假设因为没有执行 LOAD/STORE 它可以保持未解析地址?
如果它没有解析地址,那么调用者可能会得到一个偏移地址而不是一个有效地址。这可能吗?
【问题讨论】:
-
请贴一些代码。
标签: c linux pointers shared-libraries