Jiw*_*won 5 binary x86 elf bin got
据我所知,PLT
并且GOT
是处理动态链接功能的部分。
如果代码调用printf
libc 的函数,
1. 首先它调用PLT
getprintf
的地址。
2. 并将此地址写入GOT
部分。
3. 从第二次调用开始,代码使用编写的函数GOT
。
当我仔细查看 ELF 二进制文件时,
- 我发现PLT
ELF 中的section名称是<.plt>
.
-GOT
在 ELF 中部分的名称是<.got.plt>
.
但是...... <.got>
ELF中也有部分。
我无法理解如何使用此部分。
Q.<.got>
节的用法是什么?和部分有
什么区别?<.got>
<.got.plt>
PS 1. 这个<.got>
部分非常小,(在我的示例二进制文件中它只包含 4byte。)
在这里我附上<.got>
部分的IDA 视图:
.got:08049FFC ; ===========================================================================
.got:08049FFC
.got:08049FFC ; Segment type: Pure data
.got:08049FFC ; Segment permissions: Read/Write
.got:08049FFC _got segment dword public 'DATA' use32
.got:08049FFC assume cs:_got
.got:08049FFC ;org 8049FFCh
.got:08049FFC __gmon_start___ptr dd offset __imp___gmon_start__
.got:08049FFC ; DATA XREF: _init_proc+F?r
.got:08049FFC ; __gmon_start__?r
.got:08049FFC _got ends
.got:08049FFC
Run Code Online (Sandbox Code Playgroud)
Got.plt 实际上是 .got 部分的较小子集。想象一下指向槽数组的尾部。从概念上讲,它看起来像这样
Int[10] 得到;int* gotplt=&got[5]
Got部分基本上可以包含全局变量和函数的地址。所有全局变量都在前几个槽中,后缀都是指向函数的指针。gotplt 是第一个槽 .got,仅包含函数的地址。
最终通过 plt. 解析函数地址后。解析后的地址进入 .gotplt,顺便说一句,正如我之前提到的,它位于 .got 内部。
归档时间: |
|
查看次数: |
2722 次 |
最近记录: |