c - 关于GOT表中函数地址在linux虚拟内存中的位置?

查看:154
本文介绍了c - 关于GOT表中函数地址在linux虚拟内存中的位置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

按照linux虚拟内存的分布,共享库在stack与heap之间,是不是意味着got表位于heap之上,stack之下?

解决方案

哦,忘记补坑了,计算机底层学得渣,其实共享库跟got不一样,got和plt都在heap之下,例如:

节头:
  [号] 名称              类型             地址              偏移量
       大小              全体大小          旗标   链接   信息   对齐
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .interp           PROGBITS         0000000000400200  00000200
       000000000000001c  0000000000000000   A       0     0     1
  [ 2] .note.ABI-tag     NOTE             000000000040021c  0000021c
       0000000000000020  0000000000000000   A       0     0     4
  [ 3] .note.gnu.build-i NOTE             000000000040023c  0000023c
       0000000000000024  0000000000000000   A       0     0     4
  [ 4] .gnu.hash         GNU_HASH         0000000000400260  00000260
       0000000000000028  0000000000000000   A       5     0     8
  [ 5] .dynsym           DYNSYM           0000000000400288  00000288
       0000000000000138  0000000000000018   A       6     1     8
  [ 6] .dynstr           STRTAB           00000000004003c0  000003c0
       00000000000000a4  0000000000000000   A       0     0     1
  [ 7] .gnu.version      VERSYM           0000000000400464  00000464
       000000000000001a  0000000000000002   A       5     0     2
  [ 8] .gnu.version_r    VERNEED          0000000000400480  00000480
       0000000000000040  0000000000000000   A       6     1     8
  [ 9] .rela.dyn         RELA             00000000004004c0  000004c0
       0000000000000048  0000000000000018   A       5     0     8
  [10] .rela.plt         RELA             0000000000400508  00000508
       00000000000000f0  0000000000000018   A       5    12     8
  [11] .init             PROGBITS         00000000004005f8  000005f8
       000000000000001a  0000000000000000  AX       0     0     4
  [12] .plt              PROGBITS         0000000000400620  00000620
       00000000000000b0  0000000000000010  AX       0     0     16
  [13] .text             PROGBITS         00000000004006d0  000006d0
       0000000000000252  0000000000000000  AX       0     0     16
  [14] .fini             PROGBITS         0000000000400924  00000924
       0000000000000009  0000000000000000  AX       0     0     4
  [15] .rodata           PROGBITS         0000000000400930  00000930
       0000000000000068  0000000000000000   A       0     0     8
  [16] .eh_frame_hdr     PROGBITS         0000000000400998  00000998
       000000000000002c  0000000000000000   A       0     0     4
  [17] .eh_frame         PROGBITS         00000000004009c8  000009c8
       00000000000000d4  0000000000000000   A       0     0     8
  [18] .init_array       INIT_ARRAY       0000000000600aa0  00000aa0
       0000000000000008  0000000000000000  WA       0     0     8
  [19] .fini_array       FINI_ARRAY       0000000000600aa8  00000aa8
       0000000000000008  0000000000000000  WA       0     0     8
  [20] .jcr              PROGBITS         0000000000600ab0  00000ab0
       0000000000000008  0000000000000000  WA       0     0     8
  [21] .dynamic          DYNAMIC          0000000000600ab8  00000ab8
       00000000000001d0  0000000000000010  WA       6     0     8
  [22] .got              PROGBITS         0000000000600c88  00000c88
       0000000000000008  0000000000000008  WA       0     0     8
  [23] .got.plt          PROGBITS         0000000000600c90  00000c90
       0000000000000068  0000000000000008  WA       0     0     8
  [24] .data             PROGBITS         0000000000600d00  00000d00
       0000000000000040  0000000000000000  WA       0     0     32
  [25] .bss              NOBITS           0000000000600d40  00000d40
       0000000000000018  0000000000000000  WA       0     0     16
  [26] .comment          PROGBITS         0000000000000000  00000d40
       000000000000004d  0000000000000001  MS       0     0     1
  [27] .shstrtab         STRTAB           0000000000000000  00000d8d
       00000000000000f8  0000000000000000

这篇关于c - 关于GOT表中函数地址在linux虚拟内存中的位置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆