본문 바로가기
Systemhacking/Base info

What is GOT & PLT

by reindeer002 2021. 1. 24.
728x90

PLT

- Procedure Linkage Table은 실제 호출코드를 담고있는 테이블로써, 해당 내용을 참조하여 "_dl_runtime_resolve"가 수행되고 실제 시스템 라이브러리 호출이 이루어지게 된다.

쉽게 말하자면 외부라이브러리를 연결해주는 코드를 담고 있는 공간이다.
실제 바이너리에서도 사용하고자 하는 함수/라이브러리 주소 대신 PLT를 호출한다.

 

GOT

- Global Offset Table은 PLT가 참조하는 테이블로 procedure들의 주소가 있다. PLT가 어떤 외부 프로시저를 호출할 때 GOT를 참조하여 해당 주소로 분기된다.

PLT함수들은 GOT라는 테이블의 주소로 분기하고 GOT는 외부 라이브러리의 함수/변수의 주소를 저장한다.

 


 

아래는 PLT, GOT가 프로그램 내부에서 printf함수 호출 시 작동 방식에 대해 그림으로 표현한 것이다.

 

printf함수의 호출이 처음일 때

=> [printf호출] -> [plt이동] -> [got참조] -> [plt이동] -> [_dl_runtime_resolve수행] -> [got에 실제 주소 저장] -> [실제 함수 주소로 분기]

printf함수의 호출이 처음일 때의 모습

 

printf함수의 호출이 처음이 아닐 때

=> [printf호출] -> [plt이동] -> [got이동] -> [printf함수로 분기]

printf함수의 호출이 처음이 아닐 때의 모습

 

728x90

'Systemhacking > Base info' 카테고리의 다른 글

Fastbin Double Free  (0) 2021.04.04
Heap Base  (0) 2021.04.03
Security Techniques 1.  (0) 2021.01.22
Tools setting  (0) 2021.01.22
How to use pwntools  (1) 2021.01.20

댓글