본문으로 바로가기

[pwn] PLT, GOT 이해하기

category System Hacking ( pwnable ) 2019. 4. 7. 18:20


[1] PLT & GOT


PLT = Procedure Linkage Table

PLT로 말그대로 프로시져 ( 여러가지의 함수들? & 외부 라이브러리? ) 들을 연결한 테이블이라고 이해하면 된다.

우리가 함수를 호출할때, 함수는 바로 호출되지않고 PLT를 통해 GOT를 참조하고, GOT에서 함수의 실제주소에 접근하여 함수가 실행된다.

GOT = Global Offset Table

프로시져의 실제 주소를 가지고있다. PLT가 참조하는 테이블이다.

그림으로 보자. printf함수를 실행한다고 했을때, 일단 PLT로 간다. 

여기서 두가지의 경우로 나누어지는데 첫번째경우는 printf함수가 첫번째로 실행되었을 경우이다.

이때는 

PLT > GOT > PLT > _dl_runtime_resolve > printf 호출                                                                                                                                   ㄴ이과정에서 GOT에 다음에 쓸 printf함수 주소 저장

의 순서대로 실행된다.


두번째경우는 printf함수가 위와같은 과정을 거치고 두번째로 실행되었을 경우이다.

이때는

PLT > GOT > printf 호출                                                                                          

의 순서대로 실행된다. 

GOT에 이미 printf 함수의 주소가 적혀있기때문에 전보다 간결한 과정으로 함수를 호출한다.






[2] PLT & GOT의 활용

https://sunrinjuntae.tistory.com/27 라이트업도 열심히 써놨으니 읽어보시면 이해하실수 있을거에요.