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호출] -> [plt이동] -> [got이동] -> [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 |
댓글