【发布时间】:2018-04-01 05:07:20
【问题描述】:
试图了解在以下情况下搬迁是如何发生的
我有一个共享库 libbigshr.so,它使用另一个共享库 libfunlib.so。在后者中,我声明了这个全局变量 foo。要编译前者,我必须将前向声明为 extern int foo。
.rel.dyn 在 libbigshr.so
Offset Info Type Sym.Value Sym. Name
000005a5 00000401 R_386_32 00000000 foo
000005ab 00000401 R_386_32 00000000 foo
000005c7 00000401 R_386_32 00000000 foo
.rel.dyn 在 libfunlib.so
000005a5 00000901 R_386_32 00002010 foo
在 libfunlib 中,平移偏移量是正确的值 (0x2010),因此我没有问题。但想知道如何在 libbigshr 中插入正确的地址。我可以理解,一旦为变量分配了内存并确定了它的位置,就可以在其他任何地方使用相同的变量。但我对这样做的过程很感兴趣。
由于我的无知,我的问题可能没有足够的数据来回答 - 所以请告诉我,我会提供更多细节。
【问题讨论】:
标签: gcc linker loader relocation