首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.got和.got.plt部分有什么不同?

.got和.got.plt部分有什么不同?
EN

Stack Overflow用户
提问于 2012-07-27 03:15:36
回答 1查看 11.7K关注 0票数 24

ELF格式的.got和.got.plt部分有什么不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-27 02:33:03

我之前的评论是对的:

我认为.got是关于全局‘变量’的重新定位,而.got.plt是一个辅助部分,在解析过程的绝对地址时与.plt一起工作。

下面的例子让事情变得更清楚了。

这些是我的32位i686-linux /lib/libm.so的重定位

代码语言:javascript
复制
Relocation section '.rel.dyn' at offset 0x32b8 contains 8 entries:
 Offset     Info    Type            Sym.Value  Sym. Name
00025030  00000008 R_386_RELATIVE   
00024fd8  00005706 R_386_GLOB_DAT    00025034   _LIB_VERSION
00024fdc  00000406 R_386_GLOB_DAT    00000000   __gmon_start__
00024fe0  00000506 R_386_GLOB_DAT    00000000   _Jv_RegisterClasses
00024fe4  00000806 R_386_GLOB_DAT    00000000   _rtld_global_ro
00024fe8  00000906 R_386_GLOB_DAT    00000000   stderr
00024fec  00013006 R_386_GLOB_DAT    0002507c   signgam
00024ff0  00000e06 R_386_GLOB_DAT    00000000   __cxa_finalize

Relocation section '.rel.plt' at offset 0x32f8 contains 12 entries:
 Offset     Info    Type            Sym.Value  Sym. Name
00025000  00000107 R_386_JUMP_SLOT   00000000   fputs
00025004  00000207 R_386_JUMP_SLOT   00000000   __errno_location
00025008  00000307 R_386_JUMP_SLOT   00000000   sprintf
0002500c  00000407 R_386_JUMP_SLOT   00000000   __gmon_start__
00025010  00000607 R_386_JUMP_SLOT   00000000   strtod
00025014  00000707 R_386_JUMP_SLOT   00000000   __assert_fail
00025018  00000a07 R_386_JUMP_SLOT   00000000   strlen
0002501c  00000b07 R_386_JUMP_SLOT   00000000   strtof
00025020  00000c07 R_386_JUMP_SLOT   00000000   fwrite
00025024  00000d07 R_386_JUMP_SLOT   00000000   strtold
00025028  00005e07 R_386_JUMP_SLOT   00005970   matherr
0002502c  00000e07 R_386_JUMP_SLOT   00000000   __cxa_finalize

正如您所注意到的,有两个重定位部分,即.rel.dyn和.rel.plt。您可以看到,.rel.plt的所有重定位都是R_386_JUMP_SLOT类型的,这意味着它们是分支重定位;另一方面,.rel.dyn中的几乎所有重定位都是R_386_GLOB_DAT,这意味着全局变量的重定位。

.symtab和.dynsym之间还有另一个细微的区别。前者包含静态链接编辑期间使用的所有符号的引用,后者仅包含动态链接所需的那些符号。因此,上面提到的位置调整仅涉及.dynsym部分。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11676472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档