【问题标题】:different function address in PIC shared libraryPIC共享库中不同的函数地址
【发布时间】:2015-05-16 20:15:45
【问题描述】:

我有一个 ptr.c 文件

a@po:~/code/link_load$ cat ptr.c
int test()
{
     printf("in test1 %p\n",&test);
    return 0;
}

我创建了一个共享库

a@po:~/code/link_load$ gcc -fPIC -c ptr.c
a@po:~/code/link_load$ gcc -shared -o libptr.so ptr.o                                                                       

然后我从两个程序 p1.c 和 p2.c 调用 test,调用 test 后调用 test 和 p1.c 都休眠以确保两个可执行文件一起处于活动状态。

由于文本部分是共享的,我希望测试函数的地址是相同的。

但不是,为什么?

编辑:我猜打印的地址是虚拟地址。 如果这是真的,那么它会映射到实际地址,这对于 p1 和 p2 都是相同的。

【问题讨论】:

    标签: c shared-libraries dynamic-linking fpic


    【解决方案1】:

    单个文件(例如库的文本部分)可以在多个进程中映射到不同的虚拟地址,同时仍被共享。这就是这里发生的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 2014-12-06
      • 2017-07-10
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 2018-08-05
      相关资源
      最近更新 更多