컴퓨터 시스템 : CSAPP 7장 정리 - 7.13 ~ 7.15
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/7장 링커
7.13 라이브러리 인터포지셔닝 (Library Interpositioning)라이브러리 인터포지셔닝은 공유 라이브러리 함수 호출을 가로채어 자신이 정의한 코드로 대체할 수 있게 해주는 강력한 기술이다. 이를 통해 다음과 같은 작업이 가능하다:특정 함수 호출 횟수 추적함수의 입력/출력 값 검증 및 기록특정 함수를 완전히 다른 구현으로 대체기본 개념인터포지셔닝은 다음 세 단계를 포함한다:대상 함수와 동일한 시그니처의 래퍼(wrapper) 함수를 만든다.특정 메커니즘을 이용해 시스템이 원래 함수가 아닌 래퍼를 호출하게 한다.래퍼 함수는 자체 로직을 실행한 후 원래 함수를 호출하고 결과를 반환한다​.인터포지셔닝의 세 가지 방식1. 컴파일 타임 인터포지셔닝 (Compile-Time Interpositioni..
컴퓨터 시스템 : CSAPP 7장 정리 - 7.11 ~ 7.12
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/7장 링커
7.11 애플리케이션에서 공유 라이브러리 로딩 및 링킹지금까지는 프로그램이 시작되기 전에 동적 링커가 .so 파일을 로드하고 심볼을 해결하는 과정만 다뤘다. 그러나 실제로는 프로그램이 실행된 이후, 즉 런타임 중에 공유 라이브러리를 로드하고 연결할 수도 있다.런타임 동적 링킹의 유용성 소프트웨어 배포윈도우 프로그램은 자주 사용되는 기능을 DLL로 나눠서 제공한다.새로운 DLL 버전을 배포하면, 사용자는 프로그램을 다시 컴파일하지 않고도 자동으로 새로운 기능을 사용할 수 있다.고성능 웹 서버초기 웹 서버는 CGI를 위해 fork와 execve로 외부 프로그램을 호출했다.현대 서버는 요청마다 동적 함수를 라이브러리로부터 로드하고 함수 포인터로 직접 호출한다.함수는 서버 메모리에 캐시 되며, 이후 요청에서는 ..
컴퓨터 시스템 : CSAPP 7장 정리 - 7.8 ~ 7.10
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/7장 링커
7.8 실행 객체 파일 (Executable Object Files)링커는 여러 개의 목적 파일을 하나의 실행 객체 파일(executable object file)로 병합한다. 이 파일은 이제 디스크에서 메모리로 로드되어 바로 실행할 수 있는 상태이다. 즉, 소스 코드로 시작된 프로그램이 최종 실행 가능한 이진 파일로 완성되는 지점이다.ELF 실행 파일 구조 요약ELF 실행 파일은 여러 부분으로 나뉘며, 각 부분은 특정한 기능을 담당한다. 대표적인 구성은 아래와 같다 (그림 7.13 기준):주요 구성 요소:ELF 헤더: 전체 포맷에 대한 정보를 제공섹션 헤더 테이블: .text, .data 등 객체 파일 섹션에 대한 설명세그먼트 헤더 테이블(Program Header Table): 섹션을 런타임 메모리 ..
컴퓨터 시스템 : CSAPP 7장 정리 - 7.7 재배치
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/7장 링커
7.7 재배치 (Relocation)링커가 심볼 결합을 완료하면, 각 심볼 참조가 하나의 정확한 정의와 연결되어 있다. 그다음 링커는 재배치(relocation) 과정을 통해 각 심볼에 실행 시간 주소(run-time address)를 할당한다. 이 과정은 두 단계로 나뉜다.1단계 : 섹션 및 심볼 정의 재배치링커는 입력된 목적 파일들에서 동일한 종류의 섹션들을 병합(merge)한다.예: 모든 .data 섹션을 병합하여 최종 실행 파일의 .data 섹션으로 만든다.병합된 섹션들과 원래 섹션들 각각에 대해 실행 시간 주소를 할당한다.모든 전역 변수, 함수, 명령어는 이제 고유한 주소를 가지게 된다.2단계 : 섹션 내부 심볼 참조 재배치 .text, .data 섹션 내부에 있는 심볼 참조를 올바른 주소로 수..
컴퓨터 시스템 : CSAPP 7장 정리 - 7.6 심볼 결합
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/7장 링커
7.6 심볼 결합 (Symbol Resolutuion)심볼 결합은 링커가 각 심볼 참조(reference)를 정확히 하나의 정의(definition)와 연결시키는 과정이다. 이 작업은 링커가 수행하는 주요 작업 중 하나이며, 프로그램이 여러 모듈로 나뉘어 작성될 때 매우 중요하다.7.6 링커가 중복된 심볼 이름을 해결하는 방식입력 : 여러개의 목적 파일링커는 여러 개의 재배치 가능한 객체 모듈(relocatable object modules)을 입력으로 받는다.이들 각 모듈은 여러 개의 심볼을 정의하며, 일부는 로컬(local)이고 일부는 전역(global)이다.문제 : 전역 심볼 중복두 개 이상의 모듈이 같은 이름의 전역 심볼을 정의할 경우, 링커는 다음 중 하나를 해야 한다.에러로 보고하고 종료하나를..
컴퓨터 시스템 : CSAPP 7장 정리 - 7.1 ~ 7.5
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/7장 링커
7장 : 링커 (Linking)링킹이란?링킹(Linking)은 하나 이상의 목적 파일(Object Files)을 결합하여 단일 실행 파일(Executable File)로 만드는 과정을 의미한다. 프로그램이 여러 파일로 나눠져 개발될 경우, 각 파일은 개별적으로 컴파일된 뒤에 링커에 의해 결합된다.링커는 단순히 파일들을 이어 붙이는 수준을 넘어서 다음과 같은 중요한 일을 한다.심볼 결합(Symol Resolution)함수나 변수 이름과 같은 심볼을 찾아 서로 연결한다. 예를 들어 main.c에서 sum() 함수를 호출하면, 링커는 sum.c의 sum() 정의를 찾아 연결한다.재배치(Relocation)각 목적 파일의 코드와 데이터를 실행 가능한 주소로 조정한다. 각 파일은 자신의 시작 주소가 0인 것처럼 ..