본문으로 바로가기

라이브러리

category Study/reversing 2017. 10. 16. 20:56

라이브러리란?


소프트웨어 개발 시 사용되는 프로그램의 구성요소로,

공통으로 사용될 수 있는 특정한 기능을 모듈화한 것이다.

프로그래밍언어에서 라이브러리를 사용할 수 있도록 하는 API와는 다르게

동작하는 완전한 프로그램이 아닌 특정한 부분 기능만을 수행하도록 기계어의 형태로 제작되어있다.

그렇기 때문에 사용자가 직접 일반적인 조작으로 사용할 수 없으며, 프로그램이나 API를 이용하여 사용해야한다.




정적 라이브러리(Static library)


라이브러리가 실행 바이너리에 포함되어있어 별도의 작업 없이 독립적으로

라이브러리 함수들을 사용할 수 있는 방식.


하지만 정적 라이브러리를 사용하는 프로그램이 많아지면

실행파일들의 크기가 커지며,

메모리의 공간효율이 떨어진다.


사용법

#pragma comment(lib, "Name.lib")



동적 라이브러리(Dynamic (linking) library : DLL)


실행 바이너리에서 필요할 때 사용할 수 있도록 최소한의 정보만을 포함한다.

이는 암시적 링킹과 명시적 링킹으로 나뉘는데 각자의 장단점이 있다



Implicit linking(암시적 링킹)


DLL을 구현하고 컴파일하면 output file이 두개가 생성된다.


.lib 파일과 .dll 파일이다.


.lib는 함수정보를 가지는 파일이며, 링크시 사용되며

.dll은 실제 함수 코드가 들어가 있으며, 파일 실행시 사용된다.



Explicit linking(명시적 링킹)


링크단계에서 dll의 함수정보가 필요하지 않기 때문에 lib파일은 없다


필요할 때 DLL을 로딩하고, 반환할 수 있다.

이를 통해 메모리를 절약할 수 있고, 실행시간도 짧다.


그러나 암시적 링킹이 비교적 사용하기 쉬워 애용되는 경우가 많다고 한다




'Study > reversing' 카테고리의 다른 글

언패킹  (1) 2017.10.17
패킹  (0) 2017.10.16
IAT & EAT  (0) 2017.10.12
PE 헤더 구조체  (0) 2017.10.12
PE란?  (0) 2017.10.11