개발_기록용

[컴퓨터 밑바닥의 비밀 내용 정리] 1.6 동적 라이브러리와 동적 링크 본문

Computer Science

[컴퓨터 밑바닥의 비밀 내용 정리] 1.6 동적 라이브러리와 동적 링크

나폴나폴 2025. 2. 7. 18:27
728x90

0. 들어가며


  • 굉장히 감명깊게 읽었던 [컴퓨터 밑바닥의 비밀] 책의 내용을 돌아보기 위해 정리글을 작성한다.
  • 전공자로 어느정도 안다고 생각한 내용들에서도 부족한 부분이 보여 책을 다시 읽어보며 정리하고자 한다.

https://link.coupang.com/a/cdaqFv

 

컴퓨터 밑바닥의 비밀:컴퓨터 시스템의 본질을 알면 코드의 실마리가 보인다 - 보안과 해킹 | 쿠

쿠팡에서 4.3 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 3 제품도 바로 쿠팡에서 확인할 수 있습니다.

www.coupang.com

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
(본문 소개 링크로 도서 구입 시 일정액의 수수료를 제공받습니다.)


1. 주제

우선 동적 라이브러리는 정적 라이브러리와 마찬가지로

코드 영역, 데이터 영역이 포함되어 있다.

 

단지, 사용 방식과 생성 방식이 정적 라이브러리와 다를 뿐!

 

동적 라이브러리의 내용은

동적 링크 관련 필수 정보만 실행 파일에 포함된다.

 

  실행 파일의 크기를 확 줄일 수 있다.

 

그러면 결국 동적 라이브러리에 의존하는 실행 파일에는

컴파일 단계에서 필수 정보만 저장된다.

 

  동적 링크는 실제 프로그램 실행 시점까지 미뤄진다.

 

이는 너무도 흥미로운 부분인데,

조금 더 자세히 동적 링크의 실행 방식을 살펴보자.


2. 동적 링크의 2가지 방식

프로그램이 메모리에 적재(loading)될 때 동적 링크 진행됨.

 

*적재 : 실행 파일을 실행하기 위해 디스크에서 읽어 메모리 특정 영역으로 이동시키는 과정

  이 과정에서 적재 도구 loader라는 전용 프로세스가 실행된다

 

실행 파일을 적재하고 나면, 이제 적재 도구가

방금 적재한 이 실행 파일이 동적 라이브러리에 의존하는지 여부를 확인한다.

 

  이 과정에서 동적 라이브러리가 필요하면 동적 링커라는 별도의 프로세스가 실행되어

참조하는 동적 라이브러리의 존재 여부, 위치, 심벌의 메모리 위치 등을 확인하고 링크 과정을 마무리한다.

 

이 동적 링크 과정이 정상 완료되어야 프로그램이 시작되고,

동적 링크 과정에서 문제가 생기면 오류 메시지 뜨고 실행이 종료된다.


프로그램이 시작된 이후에 동적 링크 수행

 

즉, 런타임 동안 코드가 직접 동적 링크를 수행하는 방식이다. (!)

 

 그러면 실행 파일 내부엔 동적 라이브러리 정보가 저장되어 있지 않고,

프로그래머가 코드에 특정 API를 사용해 필요할 때마다 직접 동적으로 적재할 수 있다.

 

: 이 방식의 원리로 플러그인을 개발해 프로그램의 기능을 확장할 수 있는 것이다.

 

  코드에 프로그래머가 사전에 여러 함수를 미리 정의해두고, 플러그인에서 이 함수들을 구현.

그리고 동적 라이브러리의 방식을 따라 플러그인을 적재하면

새로운 동적 라이브러리를 프로그램에 정의하는 셈이다!


3. 동적 라이브러리의 장단점

장점

 

  • 정적 라이브러리와 달리 불필요한 복사본이 필요 x
  • 동적 라이브러리 코드 수정 시 그 라이브러리만 다시 컴파일하면 됨
  • 특정 부분의 성능이 중요하면 플러그인으로 C/C++로 작성된 함수를 직접 호출하고, 나머지는 파이썬으로 구현하는 등 한 프로젝트에서 여러 언어 적용 가능

 

단점

 

  • 프로그램 적재 시 or 런타임 시 링크되므로 정적 라이브러리 보다 성능이 안 좋음.
  • 일반적인 함수는 그 함수를 호출하는 명령어가 메모리의 특정 주소에 고정적으로 존재하지만, 동적 라이브러리의 코드는 여러 프로세스가 공유할 수 있으므로 임의의 메모리 주소로 참조할 수 없다. (프로세스는 각각 서로 다른 주소 공간을 갖기 때문)
  • 실행 파일은 동적 라이브러리가 있어야만 사용 가능.

 

반응형
Comments