2014. 2. 26. 10:36

DLL 이란?


DLL이란 라이브러리를 말한다. 그럼 라이브러리란 함수,데이터, 타입등의 여러가지 프로그래밍 요소들의 집합이다. 보통 LIB로 표현된다. 


자주사용되는 부분이 있다고 치자. 예를들면, 아이디 체크라든지, 이미지의 로딩이라던지, 그런 비슷한 부분을 프로그램을 한다


고 치면, 같은 부분을 여러번 소스를 작성하면 나중에 수정하기에 힘들뿐더러 당장 타이핑할때 손가락의 마비가 올수도 있다. 또한 여러번 작성함으로써 버그가 숨을 공간을 남긴다. 


이러한 부분을 따로 DLL로 만들어 놓으면, 한번 코딩으로 여러군데서 동시에 쓰일수 있다. 


또한 이렇게 만들어 놓은 좋은 DLL이 있다면, 새로운 프로그램을 빌드할때나, 실행할때 DLL의 도움을 받아 쉽게 작성할수 있으리라.

 
Unix나 Linux를 한사람들도 Dll이나, Lib 등은 알것이다. M$에서 만든것이 아니고, 여기에서 차용해 왔다고 그러더라. 

간단히 요약하자. 

* DLL은 자주사용되는 함수및 변수, 데이터의 프로그래밍 요소의 집합이다.
* 실행이나, 컴파일시 같이 빌드하면 해당 프로그램내에서 간편히 사용할수 있다.


DLL은 두가지 링크의 형태로써 프로그램과 연관을 맺는다. 

정적링크 : 


 Lib로 빌드된다. 프로그램 빌드시에 같이 빌드가 되면서 해당 프로그램의 일부가 된다. 현실적으로는 속도가 동적링


크보다는 빠르다만, 크기가 커진다. 여러 프로그램이 같은 Lib를 쓴다면, 점점더 많은 메모리가 필요하다. 절대 공유하지 않는


다. 이미 프로그램의 일부로써 다른 프로그램과는 다른 영역에 존재한다. 프로그램 빌드시에 해당 함수및 변수, 데이타들이 프


로그램에 포함되기 때문에 프로그램의 실행시 Lib의 필요가 없다. (없어도 실행가능하다) 

동적링크 :


 DLL로 빌드된다.(그렇다고, Lib가 없다는건 아니다.) 프로그램의 빌드시에는 DLL안의 함수선언만 있으면 충분하다. 현실적으


로는 속도가 정적링크보다는 느리다고 할수 있지만, 크기가 커지는 것은 아니며, 여러 프로그램이 같은 DLL을 쓴다고 하더래도 


DLL이 그 수만큼 메모리에 적재되는 것은 아니며, 공유해서 쓰게 된다. 타 프로그램도 읽을수 있는 메모리 공간에 따로 할당이 


된다. 프로그램 빌드시에는 해당 함수에 대한 선언만이 존재할뿐이어서 실제 코드가 링크된 DLL파일이 없는이상 프로그램이 실


행되지 않는다.



레지스트리란?


‘레지스트리’는 윈도우 운영체제의 실행, 또는 각종 윈도우용 응용프로그램의 실행에 필요한 설정


값들을 한데 모아 놓은 데이터베이스입니다.

 

레지스트리는 윈도우OS 만의 고유한 정보저장 체계이며, 레지스트리 내의 각 위치마다 어떤 정보가

 

어떤 형식으로 저장되어야 하는지의 규칙이 정해져 있습니다.

 

저장된 레지스트리 정보는 OS나 프로그램에 의해 읽혀지고 수정되면서 다양하게 활용됩니다. 윈도우

 

의 각 계정 별로 바탕화면을 다르게 설정하거나, MP3 확장자를 실행할 때 사용자 별로 기본 음악플

 

레이어를 다르게 정할 수 있는 것도 모두 레지스트리의 특정 위치에 이러한 규칙을 지정하는 값들이

 

존재하기 때문입니다.

 

레지스트리라는 표준화된 정보저장소가 존재함으로 인해 대부분의 윈도우용 응용프로그램들이 더 효

 

율적이고 간결한 구조를 가질 수 있습니다. 다만 레지스트리에 대한 의존도가 그 만큼 높기 때문에

 

레지스트리를 잘못 변경하거나 삭제하게 되면 필요한 정보를 얻지 못한 프로그램이 실행되지 않거나

 

비정상적으로 동작할 수 있습니다.

 

 

예를 하나 들면 어느 사용자가 A’ PC에 설치된 사진편집 프로그램의 폴더를 찾아 폴더 내용을 그대

 

로 복사해서 B’ PC로 옮긴다면, 복사된 사진편집 프로그램은 제대로 실행되지 않습니다.

 

이는 정상적인 설치과정을 거치지 않고 사진편집 프로그램 폴더의 파일만 복사를 했기 때문에 A’

 

PC에 세팅된 레지스트리 정보가 B’ PC에 정상적으로 세팅되지 못했기 때문입니다.

 

레지스트리에는 사용자 설정과 각 하드웨어, 소프트웨어의 설정 값이 저장되기도 하지만 시스템과

 

애플리케이션의 동작 기록 및 사용자의 윈도우 사용기록을 남김으로 시스템운영에 필요한 로그의 기

 

능을 하기도 합니다.

 


등록된 DLL 보기


레지스트리 편집기는 열기.  실행창에서 regedit 를 입력.


아래 레지스트리 경로에서 레지스트리에 등록된 DLL의 목록을 볼 수 있다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs



참고:

http://blog.daum.net/kiswiz/13

http://alyac.altools.co.kr/SecurityCenter/Issue/CommonSenseView.aspx?id=58

Posted by hoonihoon