본문 바로가기

Computer Engineering/Reverse Engineering

[펌글] GOT / PLT GOT와 PLT = GOT = Global Offset Table(전역 오프셋 테이블)로써, 실행 후, libc.so내 실제 함수 주소가 담기는 저장소이다. = PLT = 일종의 실제 호출 코드를 담고 있는 Procedure Linkage Table(프로시져 링키지 테이블)로써 이 내용 참조를 통해 _dl_runtime_resolve가 수행되고, 실제 시스템 라이브러리 호출이 이루어지게 된다. (매 번이 아닌, 한 번만 수행되고 나면, 그 다음부터는 GOT에 기록된 내용만 참조하여 수행) 이를 실제 시스템 라이브러리 주소를 호출하기 위해 필요한 정보 테이블이라 보면 될꺼 같다. (_dl_runtime_resolve의 인자 값도 여기서 들어감) [출처 : x82 님 홈피 ] 더보기
[펌글] gdb 를 통한 디버깅 따라하기 & gdb 매뉴얼 GDB 매뉴얼은 링크로 확인해주세요 ^_^ 참고서적 : 유닉스 리눅스 프로그래밍 필수 유틸리티 : vi, make, gcc, gdb, cvs, rpm 1. 우선 컴파일 시에 디버깅 정보를 담아야 한다. gcc -g -o [프로그램명] [소스파일명] 디버깅 옵션인 -g 으로 컴파일하며, 최적화 옵션인 -O 은 주지 않도록 한다. 2. 실행방법 gdb [프로그램명] gdb [프로그램명] [core파일명] gdb [프로그램명] [실행중인프로세스pid] 3. 종료방법 q Ctrl + d 4. 소스 찾아가기 (list) l : main 함수를 기점으로 소스의 내용이 출력된다 l 10 : 10 행 주변의 소스가 출력되는데 10 - 5 행부터 10 + 5행까지 총 10행이 출려된다. l func : func 함수의 .. 더보기