符号重定位 - 外部,静态和无存储类

时间:2018-05-29 09:01:41

标签: linker symbols relocation

我下面有3个示例代码(所有.so文件):

1)

  test = list1.replace("dfc", "")

2)

int myglob = 42;

int fun(int a, int b)
{
    return myglob + a + b;
}

3)

static int myglob = 42;

int fun(int a, int b)
{
    return myglob + a + b;
}

在这三种情况下,重新安置如何运作?它们彼此有什么不同?

我的猜测

由于第三种情况中的extern int myglob; int fun(int a, int b) { return myglob + a + b; } myglob,因此它使用extern表。

在第二种情况下,我认为我们不需要使用GOT表,因为在对象本身中定义了GOT,并且链接器知道myglob和{{之间的偏移量1}}部分,因此我们可以将已知的偏移添加到当前指令指针,以访问数据部分中的.text

第一个在文件范围中声明,并且不指定存储类,然后默认为外部链接。所以这应该与第三种情况类似。

我说错了吗?

0 个答案:

没有答案