加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – .got和.gottpl部分有什么区别?

发布时间:2020-12-13 19:33:51 所属栏目:Linux 来源:网络整理
导读:ELF格式的.got和.got.plt部分有什么区别? 解决方法 我以前的评论是正确的,下面的例子使事情有点清楚. 这些是我的32位i686-linux /lib/libm.so的重定位 Relocation section '.rel.dyn' at offset 0x32b8 contains 8 entries: Offset Info Type Sym.Value Sym
ELF格式的.got和.got.plt部分有什么区别?

解决方法

我以前的评论是正确的,下面的例子使事情有点清楚.

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

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部分.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读