본문 바로가기

전체 글

(68)
Quiz: Linux Memory Layout 코드: #include int a = 0xa; const char b[] = "d_str"; int c; int foo(int arg) { int d = 0xd; return 0; } int main() { int *e = malloc(sizeof(*e)); return 0; } 문제 및 풀이: 1. a가 위치하는 세그먼트는 어디인가? 풀이: a는 초기화된 전역 변수이므로, 데이터 세그먼트에 위치한다. 2. "d_str"가 위치하는 세그먼트는 어디인가? 풀이: "d_str"은 전역 상수이므로 read-only data에 해당한다. 3. e는 어느 세그먼트의 데이터를 가리키는가? 풀이: e는 동적으로 할당받은 힙 세그먼트의 주소를 가리킨다 4. c가 위치하는 세그먼트는 어디인가? 풀이: c는 초기화되지 않..
Background: Linux Memory Layout 세그먼트(Segment) 리눅스에서는 프로세스의 메모리를 아래의 그림과 같이 크게 5가지의 세그먼트(Segment)로 구분한다. 이 중 '코드, 데이터, BSS' 세그먼트는 크기가 정해져있으며, 힙 세그먼트와 스택 세그먼트의 크기는 유동적이고 서로 다른 방향으로 자란다 코드 세그먼트 실행 가능한 기계 코드가 위치하는 영역 데이터 세그먼트 컴파일 시점에 값이 정해진 전역 변수 및 전역 상수들이 위치하는 영역. 데이터 세그먼트는 다시 쓰기가 가능한 data 세그먼트와 쓰기가 불가능한 rodata(read-only-data) 세그먼트로 나뉜다. data 세그먼트: 전역 변수와 같이 프로그램이 실행되면서 값이 변할 수 있는 데이터들이 위치한다. rodata(read-only-data) 세그먼트: 프로그램이 실행..
Quiz: Computer Architecture Quiz 1, 2, 3, 4: rax = 0x0123456789abcdef 일 때, al ah, eax, ax 값은? 풀이: rax는 64비트 크기로, eax는 rax의 하위 32비트를 가리키며, ax는 rax의 하위 16비트이다. ax의 하위 분류에 속하는 ah와 al 중 ah는 ax의 상위 8비트, al은 ax의 하위 8비트이다. 따라서, al == 0xef ah == 0xcd ax == 0xcdef eax == 0x89abcdef 이다. Quiz 5: rax에서 rbx를 뺐을 때, ZF가 설정되었다. rax와 rbx의 대소를 비교하시오. 풀이: ZF(Zero Flag)는 연산의 결과가 0일 때 설정된다. 따라서 rax==rbx이다
Background: Computer Architecture 1. 컴퓨터 구조(폰 노이만 구조) 컴퓨터에는 '연산, 제어, 저장'이라는 세 가지 핵심 기능이 필요하다. 중앙처리장치(CPU)🧠: 연산과 제어를 위해 사용되는 컴퓨터 장치. CPU의 장치 구성은 크게 세 가지로 구성 되어있다. 1) 산술논리장치(ALU): 산술/논리 연산을 처리한다. 2) 제어장치(Control Unit): CPU를 제어한다. 3) 레지스터(Register): CPU에 필요한 데이터를 저장한다. 기억장치💾: 컴퓨터가 동작하는 데 필요한 여러 데이터를 저장하기 위해 사용된다. 기억장치는 크게 주기억장치와 보조기억장치로 나뉜다. 1) 주기억장치(RAM): "프로그램 실행과정"에서 필요한 데이터들을 "임시로 저장"하기 위해 사용된다. 2. 보조기억장치(HDD or SSD): "프로그램 실행과..