홈 > IT > IT정보 > 시스템
IT정보

PLT(Procedure Linkage Table) & GOT(Global Offset Table)

2 Selovic 0 58

PLT : 실제로 호출하는 코드를 담고있는 테이블입니다. 테이블참조를통하여

_dl_runtime_resolve 를 수행하여 실제 시스템라이브러리를 호출합니다.


GOT : PLT가 _dl_runtime_resolve를 수행하기 전 참조하는 테이블입니다.

프로시저들의 주소를 테이블에 보관하고 있으며,

PLT가 외부 프로시저를 호출할 때 GOT를 참조하여 해당주소로 점프하게 됩니다.


*만약 시스템함수의 호출이 처음일 경우 아래와 같은 순서로 호출하게 됩니다.

1. 시스템함수 호출

2. PLT로 이동

3. GOT 참조

4. 처음호출하는 함수이므로 GOT에서 내용을 찾을 수 없음

5. 다시 PLT로 이동

6. _dl_runtime_resolve 수행

7. GOT갱신 후 시스템함수 주소로 JMP


* 이전에 호출한 적이 있는 시스템 함수를 호출할 경우 아래와 같은 순서로 호출하게 됩니다.

1. 시스템함수 호출

2. PLT로 이동

3. GOT 참조(여기까지는 처음 호출할때와 동일합니다.)

4. GOT에서 해당하는 주소를 찾아 참조

5. 시스템 함수주소로 JMP


위와같이 한 번 이라도 호출한 적이 있는 시스템 함수는 GOT를 참조하여

_dl_runtime_resolve 수행없이 빠르게 함수를 호출할 수 있습니다.

실제로, 동일한 시스템함수를 2번이상 호출하는 프로그램을 작성한 후

실행시킨 다음 gdb등으로 처음호출할때와 이전에 호출한 함수를 다시 호출할때의

함수의 호출순서가 다르다는 사실을 확인할 수 있습니다.

  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오스토리로 보내기
  • 네이버밴드로 보내기
  • 네이버로 보내기
  • 텀블러로 보내기
  • 핀터레스트로 보내기
0 Comments
Category
State
  • 현재 접속자 33 명
  • 오늘 방문자 211 명
  • 어제 방문자 394 명
  • 최대 방문자 628 명
  • 전체 방문자 24,582 명
  • 전체 게시물 528 개
  • 전체 댓글수 90 개
  • 전체 회원수 30 명
Facebook Twitter GooglePlus KakaoStory NaverBand