Post

리버싱 핵심 원리 | 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.