noB*_*are 5 assembly x86-64 matplotlib elf dynamic-linking
.plt: 在 REplt[n]可用段中,蹦床在0 之外运行,.got.plt 解析器链接在plt[0]
.got .got.plt : 在可读写段中,只需寻址
我从这篇文章中了解到:https : //eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-libraries/
实际的 Linux shell 命令给了我不同的答案
$readelf -l /bin/bash
Run Code Online (Sandbox Code Playgroud)
我倾倒了两个部分(plt,plt.got)并得到了这个程序集
.plt 是我了解到的 plt:

.plt.got ,这是做什么用的?

对不起,倾销不好,它是由
objcopy -O binary --only-section=.plt.got /bin/bash ./pltgot
objcopy -O binary --only-section=.plt /bin/bash ./plt
Run Code Online (Sandbox Code Playgroud)
之间的差.plt和.plt.got是.plt使用懒惰结合和.plt.got使用非延迟绑定。
当一个函数的所有使用都是简单的函数调用时,延迟绑定是可能的。但是,如果有任何需要函数的地址,则必须使用非延迟绑定,因为绑定只能在调用函数时发生,并且我们可能需要在第一次调用之前知道地址。注意获取地址时直接访问GOT入口;只有函数调用通过.plt和.plt.got。如果使用-fno-plt编译器选项,则既不发出.plt也不.plt.got发出,函数调用也直接访问 GOT 条目。
在以下示例中,objdump -d用于反汇编,并readelf -r用于列出重定位。
.plt以 x64-64 为例,.plt将包含以下条目:
0000000000014050 <_Unwind_Resume@plt>:
14050: ff 25 3a e6 0e 00 jmpq *0xee63a(%rip) # 102690 <_Unwind_Resume@GCC_3.0>
14056: 68 02 00 00 00 pushq $0x2
1405b: e9 c0 ff ff ff jmpq 14020 <.plt>
Run Code Online (Sandbox Code Playgroud)
第一个jmpq是到 GOT 条目,jmpq如果 GOT 条目尚未绑定,则第二个执行延迟绑定。
.plt的关联 GOT 条目的重定位位于.rela.pltsection 和 use 中R_X86_64_JUMP_SLOT,这让动态链接器知道这些是惰性的。
0000000000102690 0000004600000007 R_X86_64_JUMP_SLOT 0000000000000000 _Unwind_Resume@GCC_3.0 + 0
Run Code Online (Sandbox Code Playgroud)
.plt.got.plt.got包含只需要一个的条目,jmpq因为它们不是懒惰的:
0000000000014060 <memset@plt>:
14060: ff 25 5a ea 0e 00 jmpq *0xeea5a(%rip) # 102ac0 <memset@GLIBC_2.2.5>
14066: 66 90 xchg %ax,%ax
Run Code Online (Sandbox Code Playgroud)
为重定位.plt.got的相关联的GOT条目是在.rela.dyn部,其动态连接器结合立即(与GOT重定位的其余部分一起):
0000000000102ac0 0000004b00000006 R_X86_64_GLOB_DAT 0000000000000000 memset@GLIBC_2.2.5 + 0
Run Code Online (Sandbox Code Playgroud)
查看您的问题的答案。希望对你有帮助。
不同之处在于 .got.plt 是运行时可写的,而 .got 则不是,如果您启用称为 RELRO(重定位只读)的 GOT 覆盖攻击防御。要启用 RELRO,请使用 ld 选项 -z relro。RELRO 将必须是运行时可写的 GOT 条目放置在 .got.plt 中以进行延迟绑定,而所有其他条目都位于只读 .got 部分中
作为 ELF 通用标准文件格式的一部分,差异或这种设计一直存在:
ELF 二进制文件通常包含一个名为 .got.plt 的单独 GOT 部分,用于在延迟绑定过程中与 .plt 结合使用
Q1 参考第 45 页: Andriesse、Dennis。实用二进制分析:构建您自己的 Linux 工具,用于二进制检测、分析和反汇编。旧金山,No Starch Press,2019
Q2 Ref 第 45 页:同一本书,请参阅“Lazy Binding 和 PLT”部分
| 归档时间: |
|
| 查看次数: |
1780 次 |
| 最近记录: |