PLT(Procedure Linkage Table)
PLT는 일종의 실제 호출 코드를 담고 있는 테이블로써 이 내용 참조를 통해 _dl_runtime_resolve가 수행되고, 실제 시스템 라이브러리 호출이 이루어지게 됩니다..
GOT(Global Offset Table)
GOT는 PLT가 참조하는 테이블로써 프로시져들의 주소를 가지고 있습니다. PLT가 어떤 외부 프로시져를 호출할 때 이 GOT를 참조해서 해당 주소로 점프하게 됩니다.
- printf 함수 호출이 처음일 때
[printf 함수 호출]--->[PLT로 이동]--->[GOT 참조]--->[다시PLT로 이동]--->[_dl_runtime_resolve]--->[GOT 저장 후, 실제 함수 주소로 점프]
- printf 함수 호출이 처음이 아닐 때 (GOT에 실제 printf 주소가 저장되어 있음)
[printf 함수 호출]--->[PLT로 이동]--->[GOT 참조] ===> printf 함수로 점프
한번 호출한 함수는 GOT 참조를 통해서 _dl_runtime_resolve를 다시 거치지않고 빠르게 수행가능
http://bbolmin.tistory.com/33 발췌