시스템해킹&보안/리눅스 메모리 보호기법

리눅스 PLT와 GOT

cyanhe_wh 2019. 9. 2. 21:17
반응형

PLT (Procedure Linkage Table) : Dynamic Link를 사용 시, 외부 라이브러리에 있는 함수를 연결해주는 테이블.

  • 외부 프로시저를 연결해주는 테이블.
  • PLT를 통해 다른 라이브러리에 있는 프로시저를 호출해 사용할 수 있다.

 

GOT (Global Offset Table) : PLT이 참조하는 테이블로서, GOT에는 라이브러리 함수들의 실제 주소가 있다.

  • PLT가 참조하는 테이블.
  • 외부 라이브러리의 함수/변수의 주소를 담고 있다.

처음으로 함수를 실행한다면 GOT는 함수의 주소를 갖고 있지 않고, 어떤 과정을 거쳐 주소를 알아낸다.

두 번째 호출부터는 첫 번째 호출 때 알아낸 주소로 바로 점프한다.

 

함수를 실행하기 전

plt address -> got address (jmp plt+6) -> jmp golobal_offset_table -> _dl_runtime_resolve -> _dl_fixup -> _dl_lookup_symbol_x -> jmp function address 

 

함수를 실행한 후

plt address -> got address -> jmp function address

반응형