티스토리 뷰
PLT와 GOT
Dynamic Link 방식으로 컴파일 했을 때 PLT 와 GOT를 사용하게 된다.
Static Link 방식으로 컴파일 했을 시 라이브러리가 프로그램 내부에 있어 필요하지 않지만,
Dynamic Link 방식으로 컴파일 하면 라이브러리가 프로그램 외부에 있기 때문에 함수의 주소를 알아오는 과정이 필요하다.
PLT (Procedure Linkage Table) : 외부 프로시저를 연결해주는 테이블. PLT를 통해 다른 라이브러리에 있는 프로시저를 호출해 사용 가능
GOT (Global Offset Table) : PLT가 참조하는 테이블, 프로시저들의 주소가 들어있다.
|"call printf@plt"| -> |.plt| ->(jmp got) |.got|
Dynamic Link 방식으로 프로그램이 만들어지면 함수를 호출 할 때 PLT를 참조하게 됨.
PLT에서는 GOT로 점프를 하는데, GOT에 라이브러리에 존재하는 실제 함수의 주소가 있어 함수를 호출하게 됨.
이 때, 첫 호출인지 아닌지에 따라 조금 다름.
두 번째 호출이면 GOT에 실제 함수 주소가 있겠지만 첫 번째 호출이라면 아님
그래서 첫 호출시에는 Linker가 dl_resolve라는 함수를 통해 필요한 함수의 주소를 알아오고, GOT에 그 주소를 써준 후 해당 함수로 호출 함.
'pwnable > 정리' 카테고리의 다른 글
linux 환경에서의 메모리 보호기법들 2 (RELRO) (0) | 2018.01.13 |
---|---|
linux 환경에서의 메모리 보호기법들 1 (ASLR, DEP, ASCII-Armor, Stack Canary) (0) | 2018.01.08 |
Static Link 방식과 Dynamic Link 방식 (0) | 2018.01.07 |
gdb 사용법 정리 (0) | 2018.01.06 |
ShellShock bash shell 취약점(CVE-2014-6271) (0) | 2018.01.01 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- pwnable.tw
- hacking
- rt_sigreturn
- FSB
- overflow
- heap
- pwable
- SQLi
- TLS
- ebp change
- fsop
- tcache
- fastbin
- oob
- glibc
- shellcoding
- stack reusing
- 본선가고싶다
- pwnable
- exit
- codegate
- srop
- 해킹
- HackCTF
- fastbindup
- Total
- Today
- Yesterday