본문 바로가기
컴퓨터 공학/시스템 프로그래밍

링커 (2부)

by 조엘 2020. 8. 29.

안녕하세요 파피몬입니다! 오늘은 링커에 대해 공부해봤습니다!

Computer Systems A Programmer's Perspective (3rd Edition)의 내용을 공부한 것을 토대로한 포스팅입니다. 
오개념이 있다면 알려주세요! 
1부, 2부로 나눠져있습니다 :)

 

<실행 가능한 목적파일>

 

<실행 가능한 목적파일의 로딩> 

./prog로 실행하게 된다. 운영체제 입장에서 prog라는 커맨드를 처음 마주하게 되고, 아 이게 실행가능한 목적 파일이겠거니 하고 로더를 호출해준다. 디스크에 있던 실행가능한 목적파일의 code/data영역이 메모리에 복사되고, 프로그램의 엔트리 포인트에서 프로그램이 실행되게 된다. 

 

<공유 라이브러리로 동적 링크하기>

1부에서 정적 링크의 단점을 넌지시 얘기해 봤다. printf()같이 자주 쓰이는 함수는 정적 링크로 실행 파일을 만들게 되면, 너도 나도 우리 모두 printf()를 각 실행 파일별로 바이너리 코드를 갖고 있을 것이다. 이 printf()를 메모리 하나에 위치시켜놓고 프로세스 별로 공유하면 참 좋을텐데 말이다... 그래서 그렇게 천재들이 만들어놨다. 

 

공유 라이브러리: 런타임 또는 로드타임에 임의의 메모리 주소에서 로드되고, 메모리에서 프로그램으로 연결될 수 있는 목적 모듈이다. 

 

공유 라이브러리에 해당하는 심볼 테이블 정보는 링크 타임에 연결이 되고, 실질적인 코드와 데이터는 런타임 때 프로그램에서 쓸 수 있게 한다. 

 

공유 라이브러리는 2가지 다른 방법으로 공유가 된다고 한다. 

  1. 공유 객체인 하나의 .so 파일을 참조하는 모든 실행 가능한 목적파일들에 의해 공유된다. 

  2. 공유 라이브러리의 .text 섹션은 서로 다른 실행 중의 프로세스들에 의해 공유될 수 있다. 

 

<응용으로 부터 공유 라이브러리를 로드하고 링크하기>

응용프로그램이 실행 되고 있는 동안에 동적 링커에게 응용 프로그램을 컴파일 시에 라이브러리와 링크할 필요 없이 임의의 공유 라이브러리를 로드하고 링크할 것을 요청할 수 있다.

 

공유 라이브러리에 대해 잘 설명해 놓은 유튜브 영상이 있어서, 이를 함께 포스팅 하도록 하겠다.

 

 

링커 끝!

반응형

'컴퓨터 공학 > 시스템 프로그래밍' 카테고리의 다른 글

예외적인 제어흐름 (1부)  (0) 2020.08.30
링커 (1부)  (0) 2020.08.29
쉘(Shell)에 관하여  (0) 2020.05.10

댓글