4 November 2024
LIB, DLL
by 꽈배기
-
DLL (동적 라이브러리):
- 동적 로딩: 프로그램이 실행될 때 필요한 순간에만 메모리에 로드됩니다. 즉, 프로그램이 시작할 때 메모리를 적게 차지하고, 특정 함수 호출 시 DLL이 메모리에 로드됩니다[1]. 이 방식은 프로그램 실행 속도를 향상시키고, 처음 실행 시 메모리 사용량을 줄이는 장점이 있습니다.
- 메모리 공유: 여러 프로그램이 동일한 DLL 파일을 사용할 수 있습니다. 한 번 로드된 DLL은 시스템 메모리에 남아, 다른 프로그램이 같은 DLL을 호출하면 중복 로딩 없이 사용됩니다. 이는 메모리 효율을 높입니다[3].
- 업데이트와 유지보수: DLL 파일만 교체하면 해당 DLL을 사용하는 모든 프로그램에 수정 사항이 적용됩니다. 프로그램 전체를 재컴파일할 필요가 없어 유지보수가 용이합니다 (리컴파일을 필요로하지 않음)[4].
-
단점
- DLL 파일은 수많은 프로그램에서 정기적으로 사용되기 때문에 C:\Windows\System32 및 C:\Windows\SysWOW64와 같은 영역에 저장됩니다. 이러한 할당으로 인해 DLL 파일은 멀웨어 공격에 취약합니다
- 수많은 문서와 그 활용의 반복으로 인해 DLL 관련 오류 (DLL을 공유 사용 가능하므로 동시적 크래시 가능성 존재)
- DLL 다운로드 소스의 DLL 파일이 바이러스에 오염되었을 수 있습니다.
[DLL Injection]https://medium.com/malware-autopsy/dll-injection-f4b512cacaf4
DLL 인젝션으로 target 프로그램에 dll 파일을 포함하도록 하는 공격 방법이 있다. 해당 공격으로 원격 가능한 thread를 만들어낸다.
-
LIB (정적 라이브러리):
- 정적 로딩: 컴파일 시 함수들이 실행 파일에 포함되어 프로그램이 시작할 때 메모리에 한꺼번에 로드됩니다. 이로 인해 실행 파일 크기가 커지며, 프로그램 시작 시 메모리 사용량이 증가합니다[2].
- 메모리 비공유: 정적 라이브러리는 각 프로그램에 독립적으로 포함되므로, 동일한 함수를 여러 프로그램이 사용하더라도 각각의 실행 파일에 중복 포함됩니다. 이는 메모리 낭비를 초래할 수 있습니다[6].
- 업데이트 시 재컴파일 필요: 라이브러리가 수정되면 해당 라이브러리를 사용하는 모든 프로그램을 재컴파일해야 합니다. DLL과 달리, 함수 변경 사항을 쉽게 반영하기 어렵습니다.
tags: ComputerScience