컴퓨터 시스템 : 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인 것처럼 ..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.11 부동소수점 코드
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
📘 3.11 Floating-Point Code부동소수점 연산은 일반적인 정수 연산과는 달리 복잡한 구조와 특별한 규칙을 따릅니다. 이 절의 도입부에서는 다음과 같은 핵심 요소들을 설명한다:1. 부동소수점 아키텍처란?부동소수점 아키텍처는 다음 네 가지 측면에서 프로그램이 부동소수점 데이터를 어떻게 다루는지를 규정한다:저장 및 접근 방법: 대부분 레지스터를 사용해 저장하고 접근함.작동하는 명령어 세트: 특정 명령어들이 부동소수점 데이터를 처리함.함수 호출 시 인자 및 반환값 처리 규칙: 예를 들어, 부동소수점 인자는 %xmm0~%xmm7에 저장됨.레지스터 저장 규칙: 어떤 레지스터가 caller-saved 또는 callee-saved인지 규정.2. 역사적 배경x86-64에서 부동소수점 연산은 SIMD (..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.10 기계수준 프로그램에서 제어와 데이터의 결합
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
📦 3.10 머신 수준 프로그램에서 제어와 데이터 결합하기Combining Control and Data in Machine-Level Programs이 장에서는 제어 흐름(control flow)과 데이터 구조(data structures)가 머신 수준에서 어떻게 상호작용하며 동작하는지를 탐구한다. 지금까지는 이를 별도로 배웠지만, 실제 프로그램에서는 두 요소가 복잡하게 얽혀 있다.주요 주제:포인터(pointer)의 심화 이해 – C 언어에서 가장 강력하면서도 혼란스러운 개념 중 하나.gdb 디버거 사용법 – 머신 수준 프로그램의 실행 과정을 자세히 들여다보는 도구.버퍼 오버플로우 – 보안 취약점의 주요 원인 중 하나.스택 프레임의 크기가 실행마다 달라지는 경우의 구현 방식.🧠 3.10.1 포인터 ..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.9 이기종 자료구조
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
🔷 3.9 이질적 자료구조 (Heterogeneous Data Structures)C 언어는 서로 다른 타입의 데이터를 하나의 단위로 묶는 두 가지 방법을 제공한다:struct (구조체) – 여러 타입의 객체를 연속된 메모리 공간에 저장하여 하나의 단위로 사용union (공용체) – 여러 타입의 객체가 동일한 메모리 공간을 공유하도록 함이러한 구조는 배열과 달리 단일 타입만을 반복하는 것이 아니라, 다양한 타입을 조합할 수 있게 해 준다. 객체지향 언어의 클래스(class)와는 다르지만, 구조체는 객체 정보를 캡슐화하는 데 가장 가까운 C의 수단이다​.🔹 3.9.1 구조체 (Structures)📌 기본 개념구조체(struct)는 다양한 타입의 필드를 하나의 단위로 묶는 데이터 타입이다.struct ..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.8 배열의 할당과 접근 Part.2
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
🔍 지금까지의 요약더보기🔹 3.8 도입: 배열과 주소 계산C 언어에서 배열은 연속적인 메모리 공간에 할당됨.배열 이름은 배열 시작 주소(포인터)처럼 동작.A[i]는 실제로 *(A + i)로 처리되며, 주소 계산은 xA + L*i로 단순화됨.이 단순한 구조는 어셈블리 주소 계산 명령어(D(Rb, Ri, S))와 자연스럽게 매핑됨.🔹 3.8.1 기본 원리 (Basic Principles)T A[N] 형태의 배열은 총 N * L 바이트를 연속적으로 할당.각 배열 요소 A[i]의 주소는 xA + i * L로 계산됨.배열 인덱싱은 어셈블리에서 스케일 인덱스를 활용한 주소 계산으로 구현됨 (예: movl (%rdx,%rcx,4), %eax).🔹 3.8.2 포인터 연산 (Pointer Arithmetic)포인..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.8 배열의 할당과 접근 Part.1
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
3.8 배열의 할당과 접근(Array Allocation and Access)이 절은 배열이 메모리에 어떻게 배치되고 접근되는지, 그리고 어셈블리 코드로 어떻게 변환되는지를 중점적으로 설명한다. 배열은 C 언어에서 스칼라 데이터를 모아 하나의 집합적인 자료형으로 만들 수 있는 수단이다. C는 배열을 아주 단순한 방식으로 구현하며, 이를 통해 기계어로의 변환도 간단해지는 장점이 있다.🔷 3.8.1 배열의 기본 원리 (Basic Principles)📌 핵심 아이디어배열은 C 언어에서 메모리를 연속적으로 할당받는 자료구조이다. 컴파일러가 배열을 다룰 때는 포인터 + 오프셋 방식으로 매우 단순하게 처리한다.배열은 포인터처럼 행동하지만, 실제로는 정적 메모리 블록을 가리키는 기준 주소(base address)..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.7 프로시저 Part.2
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
🔍 지금까지의 요약3.7 프로시저 도입: 프로시저는 제어 이동, 데이터 전달, 메모리 관리 등 세 가지 핵심 역할을 담당함.3.7.1 런타임 스택: 각 함수 호출 시 스택 프레임이 생성되며, 복귀 주소와 로컬 변수, 보존 레지스터 등을 저장.3.7.2 제어의 이동: call 명령어로 제어를 이동하고 ret 명령어로 원래 위치로 복귀. 복귀 주소는 스택에 저장됨.3.7.3 데이터 전송: 최대 6개의 인자는 레지스터로 전달되고, 초과분은 스택을 사용. 반환값은 %rax를 통해 전달됨.3.7.4 로컬 저장소(Local Storage on the Stack)지금까지 본 대부분의 프로시저 예제들은 로컬 저장소가 따로 필요하지 않았고, 모든 데이터가 레지스터만으로 처리될 수 있었다. 하지만 다음과 같은 경우에는 ..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.7 프로시저 Part.1
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
🌟 3.7장: 프로시저란 무엇인가?프로시저는 컴퓨터 프로그램에서 어떤 일을 "묶어서" 해주는 작은 기계 같은 것이다. 예를 들어, "사과 3개를 깎는 방법"을 한 번에 설명할 수 있으면, 그걸 다른 날에도 똑같이 쓸 수 있을 것이다. 그게 바로 프로시저다.💡 왜 좋은가?여러 번 같은 일을 하지 않도록 함.복잡한 내용을 숨기고, "무엇을 하는지"만 쉽게 보여줄 수 있음.예시로, 엄마가 "아침에 학교 갈 준비 해!"라고 할 때, 학교 갈 준비 안에는세수하기옷 갈아입기가방 챙기기밥 먹기등이 포함되어 있을 것인데 이렇게 많은 일을 하나의 명령으로 묶은 게 바로 프로시저다.프로시저는 소프트웨어에서 핵심적인 추상화(abstraction) 개념이다. 특정 기능을 수행하는 코드를 인수들과 함께 하나의 단위로 묶어놓..