System Hacking

DLL (Dynamic Link Library)

zz! 2025. 5. 11. 00:36
728x90

https://zoosso.tistory.com/941

 

DLL (Dynamic Link Library) 파일이란?

DLL 파일이란? DLL은 "Dynamic Link Library" 의 준말로 "동적 링크 라이브러리" 해당 파일을 이해하기 위해서는 "라이브러리 (Library)" 개념 먼저 이해하고, 정적 라이브러리 (Static Link Library) 방식과 비교

zoosso.tistory.com

 

DLL

Dynamic Link Library 동적 링크 라이브러리

정적 라이브러리 (Static Link Library) 방식과 비교하면 이해하기 쉽다.

 

라이브러리(Library)

code에서 반복되는 기능이 많은데, 그런 기능들을 매번 다시 작성할 수 가 없다. 그러한 로직을 따로 모아둔

파일이라고 볼 수 있습니다. 표준화된 함수 및 데이터 타입을 만들어서 모아 놓은 것입니다.

라이브러리 파일을 include 해주면 그 안에 함수들을 자유롭게 사용을 할 수 있습니다.

이렇게 라이브러리를 크게 "정적 라이브러리(.lib)" 와 "동적 라이브러리 (.dll)" 로 구분을 할 수 있습니다.

 

정적 라이브러리 (.lib, static link library)

컴파일 시점에 링커에 의해서 Main 소스와 결합이 됩니다.

컴파일 할 때 , 해당 파일 내에 함수들이 복사가 됩니다. 정적 라이브러리를 이용하는 경우에는 만들어진 실행 파일만 전다랗면 되기에 배포작업이 쉽지만, 실행 파일 크기는 라이브러리에 따라 커질 수가 있습니다.

 

동적 라이브러리 (.dll, Dynamic Link Library)

dll은 컴파일 시점에 Main 코드와 결합이 되지 않습니다.

프로그램을 실행하면 dll 파일을 필요할 때 호출을 합니다. 그렇기에 실행파일과 dll 파일은 독립적으로 존재한다고 볼 수가 있습니다.

실행 파일 크기를 줄일 수 가 있습니다. 하지만 DLL 파일 위치에 유의해서 배포를 해야합니다.

 

"A" 프로그램이 특정 DLL 파일 "B" 가 필요합니다.

"B" 파일은 핵심 로직으로 전체 프로그램 성능을 좌우합니다.

"A" 실행 프로그램은 변경점이 없고, "B" 파일의 알고리즘에 따라 제품별 성능 차이가 잇습니다.

-> 실행 파일 "A" 와 DLL 파일 "B" 가 분리되어 있어서 디버깅을 할 때 좋습니다.

정적 라이브러리 파일이 아니여서 A는 컴파일을 할 수 없습니다. DLL 파일만 변경해서 배포 및 성능 테스트를 할 수가 있습니다.

기존 DLL 파일 B에 새로운 DLL 파일 C를 만들어서 성능을 높일 수도 있습니다.

 

실제 DLL 로딩 방식은 2가지 이다.

프로그램에서 사용되는 순간에 로딩을 하고 사용이 끝나면 메모리에서 해제되는 방법(Explicit Linking)

프로그램 시작할 때 같이 로딩되어서 프로그램 종료할 때 메모리에서 해제되는 방법(Implicit Linking)

 

DLL 파일을 사용하는 과정은 다음과 같습니다

DLL 파일 로드 : LoadLibrary 함수(Windows API)를 사용해서 DLL 파일을 메모리에 로드합니다.

함수 호출 : GetProcAddress 함수 (Windows API)를 사용해서 DLL 파일의 함수 주소를 얻고, 해당 주소를 통해서 함수를 호출을 합니다.

DLL 파일 언로드 : FreeLibrary 함수 (Windows API)를 사용해서 더 이상 필요하지 않은 DLL 파일을 메모리에서 언로드합니다.

https://play-with.tistory.com/329

 

dll파일이란?

## DLL 파일에 대한 상세 설명 ### 1. DLL 파일이란 무엇인가? DLL(Dynamic Link Library) 파일은 동적 연결 라이브러리 파일로, Windows 운영 체제에서 사용하는 실행 파일 형식 중 하나입니

play-with.tistory.com

 

 

728x90