plt got,got、plt表介紹

 2023-11-30 阅读 18 评论 0

摘要:1. GOT表和PLT表 GOT(Global Offset Table,全局偏移表)是Linux ELF文件中用于定位全局變量和函數的一個表。PLT(Procedure Linkage Table,過程鏈接表)是Linux ELF文件中用于延遲綁定的表,即函數第一次被調用的時候才進行綁定

1. GOT表和PLT表

GOT(Global Offset Table,全局偏移表)是Linux ELF文件中用于定位全局變量和函數的一個表。PLT(Procedure Linkage Table,過程鏈接表)是Linux ELF文件中用于延遲綁定的表,即函數第一次被調用的時候才進行綁定。

2. 延遲綁定

所謂延遲綁定,就是當函數第一次被調用的時候才進行綁定(包括符號查找、重定位等),如果函數從來沒有用到過就不進行綁定。基于延遲綁定可以大大加快程序的啟動速度,特別有利于一些引用了大量函數的程序

3. 延遲綁定的基本原理

假如存在一個bar函數,這個函數在PLT中的條目為bar@plt,在GOT中的條目為bar@got,那么在第一次調用bar函數的時候,首先會跳轉到PLT,偽代碼如下:

plt got、bar@plt:

jmp bar@got

patch bar@got

這里會從PLT跳轉到GOT,如果函數從來沒有調用過,那么這時候GOT會跳轉回PLT并調用patch bar@got,這一行代碼的作用是將bar函數真正的地址填充到bar@got,然后跳轉到bar函數真正的地址執行代碼。當我們下次再調用bar函數的時候,執行路徑就是先后跳轉到bar@plt、bar@got、bar真正的地址。具體來看個實例:

GOT表、vulnerable_function函數調用了read函數,由于read函數是動態鏈接加載進來的只有在鏈接的時候才知道地址,編譯時并不知道地址

?

執行call _read函數會跳到plt表中尋找中:

什么是PLT,2

plt表中會繼續跳入到got表中尋找

3

got表中的所存的read函數的地址便是在pwn6進程中的實際地址,也就是

PLT全稱、

?

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/185557.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息