CS 54

[컴퓨터 구조](22)[제어흐름변경]

일반적으로 프로세서는 프로그램의 흐름이 순차적이라 생각하고 동작, 그러나 제어 흐름이 바뀔 때가 있다.명령어로 제어 흐름 변경: 전통적으로 제어 흐름을 변경하는 방법점프(JMP), 분기콜(CALL), 리턴-> 여러 환경에서 유연하게 작동하지 않음예외적인 제어 흐름 변경: 제어 흐름에 갑작스런 변화를 만들어 유연하게 처리할 수 있게함컴퓨터의 모든 수준에서 발생예) 키보드 입력, 커널 수준의 문맥 전환, 응용 프로그램에서의 전환 등예외상황: 일부 이벤트에 대한 응답으로 OS커널에 대한 제어 이전유저 코드에서 특정 이벤트 발생 -> 커널에서 예외처리 -> 유저코드 다음 줄로 복귀예외 테이블: 각 이벤트마다 고유 번호, 핸들러(예외 처리하는 코드) 주소 저장예외 분류동기적 예외: 현재 명령어 실행 중에 발생하는..

CS/컴퓨터 구조 2025.02.27

[컴퓨터 구조](21)[ELF와 링커심볼]

ELF: 실행가능하고 링크 가능한 포맷 (목적파일의 표준 바이너리 포맷)예) a.out(UNIX), PE(Windows) (리버싱 입문 정리 2 참고), Mach-O(Mac OS)종류재배치 가능 목적 파일(.o): 다른 목적파일과 결합될 수 있는 코드, 데이터 포함하는 파일, 하나의 목적파일은 하나의 소스코드에서 생성실행 가능 목적 파일(.out): 실행될 수 있는 형태의 파일 (링킹이 완료된 상태)공유 목적 파일(.so): 다른 프로그램과 공유될 수 있는 라이브러리 (windows의 DLL)구성ELF 헤더: 워드 크기, 바이트 순서, 파일 타입, 머신 타입 등 정의세그먼트 헤더 테이블: 페이지 크기, 가상주소메모리 세그먼트, 세그먼트 크기 정의.text: 컴파일된 프로그램의 기계어 코드.rodata: ..

CS/컴퓨터 구조 2025.02.17

[컴퓨터 구조](20)[링킹]

링킹: 여러 오브젝트 파일과 라이브러리를 결합하는 과정(컴퓨터 구조 7) 에 나온 링커가 수행링킹의 종류정적 링킹: 모든 코드, 라이브러리들을 하나의 실행 파일로 결합빠름, 그러나 실행 파일 크기가 커짐, 라이브러리 추가 어렵동적 링킹: 참조 정보만 포함하고 실행 시 필요한 라이브러리를 로드실행 파일 크기 작음, 쉽게 업데이트 가능, 그러나 로드해야되기 때문에 느림링킹의 필요성모듈화: 한 파일에 몰아넣는 것이 아니라 관리하기 쉽게 별도의 작은 모듈로 분할 가능, 라이브러리 사용 가능효율성시간적 효율성: 별도 컴파일 (하나의 소스 파일을 변경하더라도 다른 소스파일까지 다시 컴파일 할 필요 없음)공간적 효율성: 실제로 상요하는 기능에 대한 코드만 넣어 메모리 절약링킹 과정: 심볼 해석 -> 재배치예)// h..

CS/컴퓨터 구조 2025.02.14

[컴퓨터 구조](19)[캐시 구조 & 원리]

캐시의 구조: set(line(block, valid bit, tag))캐시는 여러개의 set으로 구성되어 있다set은 여러개의 line으로 구성되어 있다line 안에는 valid bit, tag, cache block이 들어있다valid bit: 이 라인의 캐시 블록이 유효한지 나타냄tag: 데이터의 종류 태그cache block: 데이터(byte)캐시의 크기 = set개수*한 set당 line수*cache block캐시 읽기: 주소 기준으로 찾는다주소: tag bit, set bit, offset bitset위치 찾기 (set bit)각 line에서 일치하는 태그 있는지 찾기 (tag bit)오프셋부터 시작하는 데이터 위치 찾기 (offset bit)자료형 만큼 읽기예) 모든 캐시는 비어있고 4개의 ..

CS/컴퓨터 구조 2025.02.13

[컴퓨터 구조](18)[공간 지역성과 캐시]

지역성: 프로그램은 최근에 사용한 주소와 같거나 비슷한 데이터나 명령어를 사용하려는 경향시간 지역성: 최근에 참조된 데이터는 가까운 미래에 다시 참조될 가능성이 높다공간 지역성: 어떤 메모리 위치에서 참조된다면 그 주변 메모리를 참조할 가능성이 높다예)2x2 int 배열 arr가 있을 때,int sum1(*arr){ //행 우선 int i, j; int sum = 0; for (i=0; i 이때 sum1은 순차적으로 메모리를 참조 (arr+4*i+j에서 j가 더 자주 바뀜)sum2는 왔다갔다 메모리 참조 (arr+4i+j에서 i가 더 자주 바뀜)따라서 지역성이 좋은 것은 sum1이고, 실제로 성능도 sum1이 더 좋다.(컴퓨터 구조 7 참고)캐시 메모리: 주기억장치보다 빠르게 엑세스 할 수 있는 저장 장..

CS/컴퓨터 구조 2025.02.12

[컴퓨터 구조](17)[버퍼 오버플로우]

버퍼 오버플로우: 할당된 메모리 공간을 넘어 데이터를 쓰는 상황    배열 범위를 초과하는 데이터 쓰기: A[10]에 길이가 15인 데이터를 쓰면 Bof    잘못된 입력 검증: 사용자가 예상보다 큰 데이터를 입력한 경우 스택 기반 버퍼 오버플로우를 이용한 공격    너무 큰 데이터를 넣어 데이터 저장 장소에 인접한 메모리까지 침범(리턴 주소 등)할 수 있다    따라서 공격자는 리턴 주소를 공격자 코드가 있는 곳으로 조작해 공격받도록 한다.    예) 크기가 40byte인 버퍼에 쓰레기값 40byte, 공격 코드가 있는 곳의 리턴 주소, 공격 코드를 넣어 리턴주소를 덮어쓰고 반환될 때 공격 위치로 가서 공격 실행    주의사항공격코드나 리턴주소를 넣을 때, INTEL등의 little endian 메모리..

CS/컴퓨터 구조 2025.01.31

[컴퓨터 구조 번외](2)[어셈블리 문제 풀어보기 2]

문제void switcher(long a, long b, long c, long *dest){ long val; switch(a){ case -(1)-: c = -(2)-: case -(3)-: val = -(4)-; break; case -(5)-: case -(6)-: val = -(7)-; break; case -(8)-; val = -(9)-; break; default: val = -(10)-; } *dest = val;}라는 c 코드가 있다. 위를 어셈블리어로 바꾼다면// a in %rdi, b in %rsi, c in %rdx, pointer** dest in %rcxswticher: cmpq $7, %rdi ja .L2 jmp *.L4(, %rdi, 8)..

CS/컴퓨터 구조 2025.01.30

[컴퓨터 구조 번외](1)[어셈블리 문제 풀어보기 1]

시험 끝난 기념 번외 (어셈블리 문제 풀어보기)문제long P[M][N];long Q[N][M];long sum_element(long i, long j){ return P[i][j] + Q[j][i];}이고,// i in %rdi, j in %rsisum_element:leaq 0(, %rdi, 8), %rdxsubq %rdi, %rdxaddq %rsi, %rdxleaq (%rsi, %rsi, 4), %raxaddq %rax, %rdimovq Q(, %rdi, 8), %raxaddq P(, %rdx, 8), %raxret라 컴파일 되었을 때, M, N의 값은? 해답- %rdx = 8*rdi = 8*i- %rdx = %rdx - %rdi = 8i-i = 7i- ..

CS/컴퓨터 구조 2025.01.29

[컴퓨터 구조](16)[어셈블리어 7]

배열: 같은 자료형의 자료를 모은 자료구조예) int A[2]; 이때 A = &A[0]으로 쓰일수도 있다.-> 메모리에서 연속적으로 저장되어있음예) int A[3]; -> 메모리에 4바이트 int형 자료가 3개 저장되어있음. 각각 자료 시작 주소 = A, A+4, A+8 이다. 총 배열의 크기 = 4*3 = 12바이트 어셈블리의 배열 처리완전 메모리 어드레싱으로 처리예) a = A[3]; 처리하기    rsi에 int 배열 A의 시작주소가 들어 있을때    movq $3, %rdi    movq (%rsi, rdi, 4), %rax -> A+4*3에 있는 값 받아와 rax에 저장 -> rax에 A[3]저장 어셈블리의 다차원 배열행 우선 방식으로 메모리에 저장 후 처리예시) {{1,2,3},{4,5,6}}..

CS/컴퓨터 구조 2025.01.28

[컴퓨터 구조](15)[어셈블리어 6]

스택 프레임: 함수가 호출될 떄 할당되는 스택 영역리턴 정보로컬 저장소 (필요하면 씀): 함수 내에서 선언된 지역변수 저장임시 공간 (필요하면 씀): 계산 중간값, 최적화를 위한 임시 데이터, 반환값 등%rbp: 스택 프레임의 끝 주소 저장(%rbp ~ %rsp사이가 현재의 스택 프레임)만약 레지스터가 모자르다면 여기에 값 저장하기도 한다.레지스터 저장 규칙caller saved: 호출하는 쪽에서 값을 저장할 의무caller는 콜하기 전 그 스택 프레임에 임시값 저장, 이후 callee가 복귀하면 임시값 복원%rax, %rdi, %rsi... 등이 caller saved 레지스터callee savedcallee는 함수 실행 전 프레임에 임시 값 저장 후 caller로 복귀 전 값 복원 후 return%r..

CS/컴퓨터 구조 2025.01.27
728x90
반응형