Computer Science

    [CSAPP] 3.10 Combining Control and Data in Machine-Level Programs(기계 수준 프로그램에서 제어와 데이터 결합)

    3.10 Combining Control and Data in Machine-Level Programs(기계 수준 프로그램에서 제어와 데이터 결합) C언어에서 가장 중요한 개념인 포인터의 개념에 대해 알아본다. 기계어 프로그램의 상세한 동작을 디버거 GDB를 통해 알아본다. 버퍼 오버플로우가 현실 세계 시스템에서 보안 취약성을 가져오는 것에 대해 알아본다. 함수에 의해 요구된 스택 저장소의 양이 변화하는 경우에 대해 머신레벨 단계에서 어떻게 수행되는지 알아본다. 3.10.1 Understanding Pointers(포인터의 이해) 포인터는 다른 자료구조 내 원소들을 참조하는 통일된 방법을 수행하는 역할을 한다. 포인터는 연관된 자료형을 가진다. (포괄적인 void 타입 포인터는 묵시적 형변환 또는 명시적..

    [CSAPP] 3.9 Heterogeneous Data Structures(이기종 자료구조)

    학습 주제 구조체, 공용체, 포인터, 버퍼 오버플로우 정리한 내용 3.9 Heterogeneous Data Structures(이기종 자료구조) C는 서로 다른 유형의 객체를 결합해서 자료형을 만드는 두 가지 방법이 존재. ‘struct’ Keyword를 사용해서 선언하는 구조체: 여러 개의 객체를 하나의 단위로 결합 ‘union’ Keyword를 사용해서 선언하는 공용체: 한 객체를 각각의 다른 자료형으로 참조될 수 있음. 3.9.1 Structures (구조체) 서로 다른 자료형을 가진 객체를 그룹화해서 하나의 객체로 묶어주는 자료형을 만든다. 구조체의 요소들은 각 이름에 의해 참조된다. 구조체의 요소들은 연속적인 메모리 영역에 저장되고 구조체의 포인터가 첫 번째 바이트의 주소라는 점에서 배열과 유사..

    [CSAPP] 3.8 Array allocation and access(배열의 할당과 접근)

    3.8 Array allocation and access(배열의 할당과 접근) C언어에서 배열은 숫자 데이터를 더 큰 데이터 유형으로 확장하는 한가지 방법이다. C에서 배열은 간단히 구현해서 machine code로 번역이 간단하다. C의 특징은 배열 내 element에 대한 포인터 만들고 그 포인터로 계산할 수 있다는 것이다. 이것은 machine code에서 주소 계산으로 번역할 수 있다. 3.8.1 basic principles(기본 원리) 배열 선언하는 방법은 아래와 같다. 데이터형 이름[N]; (N=element 개수) 이 선언에는 두가지 효과가 있다. (데이터 형의 크기 = L * N) 바이트의 연속적인 메모리를 할당한다. 이름은 배열의 시작을 가리키는 포인터로 사용될 수 있다. 배열의 시작 ..

    [CSAPP] 3.7 procedures(프로시저)

    학습 주제 함수와 배열에 관한 내용이다. 정리한 내용 3.7 procedures(프로시저) SW 추상화에서 중요한 것이다. 프로그램의 다른 곳에서 호출될 수 있다. 많은 프로그래밍 언어에서 function, method 등 이렇게 불린다. machine level에서 procedure 지원하기 위해서는 반드시 다뤄져야 하는 많은 attribute들 있다. 함수 P가 Q를 부르고 Q가 실행이 되고 다시 P로 돌아오는 상황을 가정해보자. 이때 아래의 메커니즘을 한번 또는 여러번 포함할 수 있다. passing control program counter = PC는 Q의 코드의 시작 주소로 설정되어야 한다. 그리고 Q가 반환이 되면 P의 다음 명령어로 설정이 되어야 한다. passing data P는 1개 이상..

    [CSAPP] 3.6 Controls(제어문)

    3.6 Controls(제어문) C의 반복문 스위치문은 시험결과에 따라 일련의 연산이 실행되는 조건부 실행이 요구됨. 두개의 기본적인 방법을 제공 데이터 값을 시험해서 시험결과에 따라 데이터 흐름을 바꾼다. 데이터 값을 시험해서 결과에 따라 제어흐름을 바꾼다. 보통 C와 기계어코드의 인스트럭션은 모두 프로그램에 나타나는 순서대로 실행된다. 이때 기계어의 인스트럭션은 jump로 변경가능함. 3.6.1 Condition Codes(조건 코드) CPU는 레지스터와 함께 구성되는데 이 레지스터는 조건부 분기를 수행하는데 쓰일 수 있음. CF : 캐리 플래그. 가장 최근에 수행한 연산에서 가장 중요한 비트로부터 받아 올림이 발생한 것을 표시. 비부호형 연산에서 오버플로우를 검출할 때 사용. ZF : 영 플래그. ..