gpt4 book ai didi

c - 共享库 (PIC) 返回指向调用者结果的指针 SEGFAULT

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:41 25 4
gpt4 key购买 nike

我在 Linux 上使用 gcc 构建了一个共享库 (test.so)代码当然是PIC。

其中一个 test.so API 调用返回一个指向共享库堆栈上的结构的指针,另一个调用返回指向共享库数据段上结构的指针。

当我在从共享库中获取这些指针后尝试访问它们时,我得到了 SEGFAULT。

我的问题是:

  1. 堆栈地址应该始终有效(因为它们是作为 SP 的偏移量计算的)那么为什么我得到了 SEGFAULT?

  2. 对于全局地址,如果我在库中访问它们,编译器会使用动态加载器给出的基值来解析它们,但是如果我这样做会发生什么:

    返回&x

编译器是返回已解析的地址,还是假设因为没有执行 LOAD/STORE,它可以保留未解析的地址?

如果它没有解析地址,那么调用者可能会得到一个偏移地址而不是一个有效地址。这可能吗?

最佳答案

one of test.so API calls returns a pointer to a struct on the shared library stack

没有“共享库栈”这样的东西。只有一个堆栈(对于每个线程),返回局部变量的地址几乎不是您想要的。

another call returns a pointer to a struct on the shared library data segment.

没关系,只要您不 dlclose() 有问题的库即可。

When I am trying to access these pointesr after getting them from the shared library I get a SEGFAULT.

很可能您没有告诉我们整个故事,您的问题在别处。

无论如何,鉴于您提供的信息,不太可能有好的答案。请使用更多详细信息编辑您的问题。可以构建并证明您的问题的测试用例是最好的。

关于c - 共享库 (PIC) 返回指向调用者结果的指针 SEGFAULT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20556864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com