gpt4 book ai didi

linux - 为什么静态链接的可执行文件中会有全局偏移表和过程链接表?

转载 作者:可可西里 更新时间:2023-11-01 11:48:47 27 4
gpt4 key购买 nike

我已经阅读了大量有关动态链接器重定位和位置独立代码的文章,包括过程链接表和全局偏移表。我不明白为什么静态链接的可执行文件需要 PLT 和 GOT。我在我的 ubuntu x86_64 机器上编译了一个 hello world 程序,当我使用 readelf -S 转储部分标题时,它显示了 PLT 和 GOT 部分。

我还创建了一个共享库,其中包含一个简单的增量函数,我使用 gcc -shared 编译而没有 -fpic,我还看到了 PLT 和 GOT 部分。这也是我没想到的。

最佳答案

I don't understand why a statically linked executable needs a PLT and GOT.

不是。

I compiled a hello world program on my ubuntu x86_64 machine and when I dump the section headers with readelf -S it shows PLT and GOT sections.

这是实现的意外。这些部分来自 crt1.o ,并且没有单独的 crt1s.o对于完全静态链接,所以你最终得到 .plt.got来自那里的条目。

你可以去掉这些部分,二进制文件仍然可以工作:

objcopy -R.got -R.plt a.out a.out2

注意:不要剥离.rela.plt ,因为该部分仍然需要实现 IFUNC

关于linux - 为什么静态链接的可执行文件中会有全局偏移表和过程链接表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34850007/

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