[英].plt .plt.got what is different?
.plt
:在 RE 能段中,除 0 外,在plt[n]
處具有蹦床功能,在plt[0]
處具有.got.plt 解析器鏈接
.got
.got.plt
:在 RW 段中,只是地址
我從這篇文章中了解到: https://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-libraries/
實際的 Linux shell 命令給了我不同的答案
$readelf -l /bin/bash
我傾倒了兩個部分(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
查看您的問題的答案。 希望它可以幫助你。
不同之處在於.got.plt 是運行時可寫的,而.got 不是如果您啟用了針對稱為RELRO 的GOT 覆蓋攻擊的防御(重定位只讀)。 要啟用 RELRO,請使用 ld 選項 -z relro。 RELRO 將惰性綁定必須是運行時可寫的 GOT 條目放在.got.plt 中,所有其他條目放在 read-only.got 部分
作為 ELF 通用標准文件格式的一部分,差異或這種設計已經存在:
ELF 二進制文件通常包含一個名為 .got.plt 的單獨 GOT 部分,用於在惰性綁定過程中與 .plt 一起使用
Q1 參考第 45 頁: Andriesse,Dennis。實用二進制分析:構建您自己的 Linux 工具,用於二進制檢測、分析和反匯編。舊金山,No Starch Press,2019
Q2 參考第 45 頁:同一本書,請參閱“惰性綁定和 PLT”部分
.plt
和.plt.got
的區別在於.plt
使用惰性綁定,而.plt.got
使用非惰性綁定。
當 function 的所有使用都是簡單的 function 調用時,延遲綁定是可能的。 但是,如果需要 function 的地址,則必須使用非惰性綁定,因為綁定只能在調用 function 時發生,並且我們可能需要在第一次調用之前知道地址。 注意獲取地址時直接訪問GOT入口; 只有 function 通過.plt
和 .plt.got 調用.plt.got
。 如果使用-fno-plt
編譯器選項,則不會發出.plt
和.plt.got
,並且 function 調用也直接訪問 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>
第一個jmpq
指向 GOT 條目,如果 GOT 條目尚未綁定,則第二個jmpq
執行延遲綁定。
.plt
相關 GOT 條目的重定位位於.rela.plt
部分並使用R_X86_64_JUMP_SLOT
,這讓動態 linker 知道這些是惰性的。
0000000000102690 0000004600000007 R_X86_64_JUMP_SLOT 0000000000000000 _Unwind_Resume@GCC_3.0 + 0
.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
.plt.got
的相關 GOT 條目的重定位位於.rela.dyn
部分(連同 GOT 重定位的 rest),動態 linker 立即綁定:
0000000000102ac0 0000004b00000006 R_X86_64_GLOB_DAT 0000000000000000 memset@GLIBC_2.2.5 + 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.