c - 关于GOT表中函数地址在linux虚拟内存中的位置?
本文介绍了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屋!
查看全文