전체 글

전체 글

    [자료구조] 보물찾기를 열어라! (이중 원형 연결리스트)

    교재 : C로 배우는 쉬운 자료구조 문제 : Chapter 04 - 응용예제 04 - 보물상자를 열어라! 구분 : 이중 원형 연결 리스트 (Doubly Circular Linked List) (=양방향 원형 연결 리스트) 이 문제를 풀기 위해서는 특정 보물상자를 기준으로 시계방향 또는 시계반대방향으로 자유롭게 이동할 수 있어야 한다. 그러므로 양방향으로 연결된 원형리스트를 구성한다. 보물상자의 개수는 입력을 받고 이 입력받은 값에 따라 다음 보물상자의 위치를 나타내는 숫자로 입력받을 개수가 달라진다. 입력 받은 N을 malloc을 통해 동적할당을 해주고, 그 안에다가 다음 보물상자의 위치를 나타낸 숫자를 n개 입력 받는다. 열어진 보물상자는 양방향 원형리스트에서 연결을 끊고, 메모리 할당도 해제한다. 처..

    버퍼 오버플로우 공격(Buffer Overflow Attack)

    버퍼 오버플로우(Buffer Overflow Attack)란? - 버퍼란 데이터가 저장되는 메모리 공간이다. 이 프로그램이 실행될 때 이 메모리 공간에 버퍼의 크기보다 더 많은 입력을 받는다면 버퍼 오버플로우가 발생한다. 쉽게 말해서 크기가 정해져 있는 컵에 물을 넘치게 받았다고 생각하면 된다. 이 경우 해커가 특정 메모리 값을 임의로 변조할 수 있기 때문에 취약점이 된다. 위 그림과 같이 buf1의 크기가 5byte이고 buf2의 크기도 5byte이라고 가정해보자. 여기서 buf1 주소에 입력을 받게 되었을 때, 입력 크기를 제한해주지 않는다면, 5byte를 넘어서는 입력 값을 줄 수 있다. 이 경우 buf1의 입력을 통해 buf2의 공간의 값을 임의로 바꿀 수 있다. buf1에 'abcdefgh'라는..

    함수 프롤로그 / 에필로그 (prologue / epilogue)

    프롤로그 : 책의 첫머리에 서문 대신 쓴 시. 에필로그 : 시가, 소설, 연극 따위의 끝나는 부분. 프롤로그와 에필로그의 사전적 의미이다. 이처럼 프로그래밍에도 함수가 실행되고, 종료될 때도 하나의 약속처럼 프롤로그와 에필로그가 있다. 함수의 프롤로그와 에필로그는 스택 프레임을 생성하고 제거하는 역할을 한다. * 스택 : 데이터를 꺼낼 때, 마지막에 저장한 데이터가 먼저 꺼내진다. 후입선출(LIFO - Last In First Out) 구조 * 스택 프레임 : 함수가 호출될 때 스택 메모리가 할당되고, 종료 시 호출하기 전에 저장한 주소로 복귀한다. main 함수가 수행되는 과정에서 A 함수가 실행될 경우, 그림과 같이 A 함수의 스택 프레임이 생성된다. 이 사진은..

    [자료구조] 연결리스트 역순 알고리즘

    노드의 구성은 data와 *next 변수로 구성되어 있다. 노드의 *next 주소 흐름은 100(head) -> 200 -> 300 -> 400 -> NULL이다. 이 흐름을 역순, 즉 반대로 400 -> 300 -> 200 -> 100 -> NULL으로 바꾸는 알고리즘을 생각하는 것이 과제이다. 반복문과 재귀함수를 이용해서 두가지 방법으로 알고리즘을 구현할 수 있었다. 1. 반복문을 이용한 알고리즘 : 앞 노드부터 흐름을 바꾸면서 뒤 노드로 진행한다. 2. 재귀함수를 이용한 알고리즘 : 노드의 끝까지 타고 들어가서 뒤 노드부터 흐름을 바꾸면서 앞 노드로 돌아온다. 1. 반복문을 이용한 연결리스트 역순 알고리즘 처음으로 생각하게 된 알고리즘은 앞 노드부터 한 칸씩 *next 포인터를 역순으로 설정해주는 ..

    함수 호출 규약(Calling Convention)

    함수 호출 규약(Calling Convention) - 함수를 호출하는 방식에 대한 약속. 1) 인자 전달 방법 2) 인자 전달 순서 3) 스택 프레임 정리 방법 스택 프레임(Stack Frame) - 함수를 호출할때 상위에서 진행되던 함수를 저장하고, 인자를 전달하기 위해 스택 프레임의 구조를 사용한다. main 함수가 실행되는 과정에서 A 함수가 호출된다면, A함수에 대한 인자를 약속된 순서대로 스택 프레임에 저장한다. 그 다음 A 함수가 끝나고 되돌아 올 주소(RET)와 A 함수가 실행되기 전의 EBP의 값(SFP)을 스택에 push한다. 이후 A 함수가 끝나면, A 함수의 스택 프레임은 정리되고 RET와 SFP 값을 통해 main 함수의 스택 프레임으로 돌아오게 된다. x86 아키텍처에 사용되는 ..

    [linux] source ~/.bashrc 에러 command not found: shopt

    나는 zsh을 쓴다.. 그런데 환경변수 추가하려다가 에러가 났다.. .bashrc:16: command not found: shopt .bashrc:24: command not found: shopt .bashrc:115: command not found: shopt /usr/share/bash-completion/bash_completion:45: command not found: shopt /usr/share/bash-completion/bash_completion:1512: parse error near `|' \[\e]0;\u@\h: \w\a\]\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$ zsh를 사용하면 .zshrc에 환경변수..

    명령어 집합 구조 (Instruction Set Architecture, ISA)

    ISA(Instruction Set Architecture) - CPU가 인식해서 기능을 이해하고 실행할 수 있는 기계어 명령어 집합 - 하드웨어와 시스템 소프트웨어 사이의 인터페이스를 정의한다. - 칩을 만드는 회사마다 ISA의 종류가 다르다. ISA 분류 - 가변길이(CISC(Complex Instuction Set Computer)) : 명령어의 길이가 일정하지 않음. ex) x86 - 고정길이(RISC(Reduced Instruction Set Computer)) : 명령어의 길이가 일정함. ex) ARM, MIPS, AVR CISC는 마이크로 프로그래밍 방식을 채택했고, RISC는 Hard Wired 방식으로 설계됐다. CISC 명령어는 복잡하며 RISC보다 느려지지만 명령어 수가 적을수록 사이..