리버싱 핵심 원리 | DLL
리버싱 핵심 원리 | DLL
Windows Library, DLL
라이브러리(Library)란?
함수, 변수, 데이터, 타입 리소스등 여러 가지 프로그래밍 요소들의 집합
- windows 운영체제에서는 주로
*.lib,*.dll과 같은 확장자를 가진다.
표준화할 수 있는 함수 집합
- C 표준 함수 : printf(), scanf() 등
- Win32 API : LoadLibraryA(), GetProcAddress(), MessageBox(), …
라이브러리 링킹이란?
누군가가 만들어놓은 라이브러리를 자신의 프로그램에서 활용하는 방안
- 정적링킹과 동적링킹으로 구분된다.
정적 링킹(Static Linking)
빌드 중 링커가 라이크러리 컨텐츠를 바이너리(exe) 실행파일에 통합하는 방식
- 실행 파일에 라이브러리 코드가 복제되기 때문에 실행 파일의 크기가 커짐
- 실행 파일은 단독 실행 파일이 되기 때문에 빌드만 성공하면 런타임에 실패하지 않음
동적 링킹(Dynamic Linking)
빌드 시 라이브러리 함수 코드가 실행 파일에 통합되지 않고, 런타임에 라이브러리 로드 및 함수 호출이 수행되는 방식
- 프로그램 실행 시에 함수가 실행 파일과 연결됨
- 호출할 함수 정보를 IAT(Import Address Table)에 적재되므로 실행 파일의 크기가 작다는 장점이 있음
- PATH 또는 시스템 폴더에 DLL이 없으면 프로그램 실행 불가 (런타임 시에 오류 발생)
This post is licensed under
CC BY 4.0
by the author.
