본문 바로가기

Basic Theory

가상 메모리(virtual memory) 운영체제(OS)는 레지스터(register), 캐쉬(cache), 램(RAM), 하드디스크(hard disk) 를 하나의 커다란 메모리로 보이게끔 도와준다. 이렇게 운영체제가 통으로 구성해주는 메모리는 가리켜 가상 메모리(virtual memory)라 한다. 가상이라고 하는 이유는? 물리적인 메모리(하드웨어 관점에서 메모리)를 기반으로 가상으로 구성된 메모리이기 때문이다. 그리고 우리가 흔히 이야기 하는 메모리의 주소 또한 Linux 나 Windows 와 같은 운영체제가 만들어주는 가상메모리 주소이다. [출처] 도서 : 난 정말 C Programming을 공부한 적이 없다구요! (윤성우 지음) 더보기
Emacs(Windows) 에서 bash shell 사용하기 Linux(Ubuntu) 환경에서는 기본적으로 Emacs에서 M-X ansi-term 을 입력하면 bash shell 을 사용할 수 있다. 하지만 윈도우(windows)에서는? 윈도우에서도 Emacs 내에서 bash shell 을 사용하고 싶은 욕구(?)에 여기저기 수소문(=구글링)을 한 결과 드디어 Emacs(windows)에서 bash shell을 사용할 수 있게 되었다. 사용하기 전에 앞서 c:/cygwin/ 이 경로에 Cygwin이 설치되어있는 환경이라고 가정한다.http://home.blarg.net/~offby1/cygwin-mount/cygwin-mount.el 이 파일을 받은 후에 C:/emacs/site-lisp 여기에 넣어준다.아래의 내용을 긁어서 .emacs 라는 파일명으로 저장한다(.. 더보기
프로그램을 실행하는데 있어서 메모리 공간이 필요한 이유? 프로그램의 실행 속도에 미치는 영향 : 메모리의 활용방식 > CPU의 성능 프로그램의 실행과정에서 선언하는 변수의 메모리 공간 할당을 위해서프로그램의 실행과정에서 사용되는 상수의 표현을 위해서연산 및 호출된 함수의 반환 값을 임시로 저장하기 위해서=> 이처럼 어느 한 순간도 메모리 공간을 사용하지 않을 때가 없다. [출처] 도서 : 난 정말 C Programming을 공부한 적이 없다구요! (윤성우 지음) 더보기
메모리(Memory)영역 - 코드영역(code segment) 메모리 영역을 공부하기 전에 '세그먼트'(segment) 와 '영역'이라는 표현에 대해서 같은것인지에 대해서 긴가민가 했었는데 공부를 하면서 아래 그림과 같이 이렇게 나누어진 영역을 세그먼트(segment)라고 한 다는 것에 대해서 알 수 있었다. CPU가 읽어 해설할 수 있는 기계어들이 위치하게 되는 영역을 말한다. 우리가 작성한 메인 프로그램의 기계어 코드가 바로 이 영역에 위치하게 된다. 보통 첫번째로 실행 가능한 명령어는 이 세그먼트(segment)의 맨 처음에 위치하며, 운영체제(OS)는 프로그램 실행을 시작하기 위해 그 위치를 알고 있다. 이름이 의미하듯이, 코드 세그먼트(CS) 레지스터는 코드 세그먼트의 주소를 의미한다. 그리고 우리가 코딩한 것을 실행을 시키면 CPU가 알아서 코드영역에 저.. 더보기
지역변수(local variable) 지역변수는 선언된 지역(선언된 중괄호 안)을 벗어나 버리면 메모리 공간에서 소멸된다.여기서 중요한 사실은 자동으로 소멸이 된다는 것이다. 그래서 지역변수를 가리켜 '자동변수(automatic variable)'라고도 부른다. 이처럼 잠깐 사용하고 삭제되는 데이터이기 때문에 지역변수와 매개변수는 스택(stack)영역에 쌓이게 된다. cf. 지역변수는 대입 연산자를 통해서 초기화가 이뤄지지만, 매개변수는 함수호출시 전달되는 인자 값을 통해서 초기화가 이뤄진다. [출처] 도서 : 난 정말 C Programming을 공부한 적이 없다구요! (윤성우 지음) 더보기
setUID란? Set이란 말은 '변경하다'란 뜻을 가지고 있고, UID는 여러분도 아시다시피 User ID의 약자이다. 따라서 SetUID는 'ID를 변경한다.'라고 해석된다. 설명하자면 SetUID는 일시적으로 자신의 ID를 변경하는 것을 말한다. 그럼 왜 일시적으로 자신의 아이디를 변경할까? 예) linux에서 개인계정 비밀번호호 변경시 /etc/shadow 도 변경이 된다. 이 때 passwd 명령어를 실행하는 동안에 '루트로의 일시적인 아이디 변경'이 되는 것이다. 결국 shadow 파일은 사용자의 권한이 아닌 root 권한으로 변경이 된 셈이다. 정리하자면1. SetUID는 파일에 걸린다!2. SetUID가 걸린 파일을 실행하면 나의 아이디가 변경된다.3. 파일의 실행이 끝나면 다시 원래의 아이디로 돌아온다... 더보기
Libc(C 표준 라이브러리) "libc"라는 용어는 보통 "표준 C 라이브러리"의 줄임말인데, 이는 모든 C 프로그램이 (그리고 때로는 다른 언어의 프로그램들까지) 쓸 수 있는 표준 함수들의 라이브러리이다. C 표준 라이브러리(C standard library)는 헤더 파일과 라이브러리 루틴이 모여 있는 것으로 C 프로그래밍 언어에서 입출력과 문자열 관리와 같은 일상적인 작업을 추가할 때 사용한다. 코볼, 포트란, PL/I와 같은 언어와 달리, C는 이러한 작업을 위해 키워드를 내장하고 있지 않으므로 거의 모든 C 프로그램들은 표준 라이브러리를 사용하여 기능을 구현한다. [출처]libc(7) by wariua위키백과 - C 표준 라이브러리 더보기
[펌] Morris worm(모리스 웜) 이 글은 위키피디아를 번역한 것임. 오타/오역/오류 정정환영 모리스 웜 혹은 인터넷 웜은 인터넷으로 퍼진 최초의 컴퓨터 웜들 중 하나이다. 이것은 최초의 웜이라고 생각되며 분명히 주요 미디어의 심각한 주목을 이끈 최초의 웜이다. 1986년 미국의 컴퓨터 사기와 남용법[Computer Fraud and Abuse Act]에 의해 기소된 최초의 사건이다. Cornell 대학의 학생인 Robert Tappan Morris가 만들었고 MIT에서 1988년 11월 2일 방출되었다. 웜의 구조제작자에 의하면, 모리스 웜은 피해를 주기 위해서가 아니라 인터넷의 크기를 측정하기 위해서였다. 그러나 Cornell 대학에서 만들어젔다는 것을 감추기 위해 MIT에서 배포되었다. (공교롭게도 모리스는 현재 MIT의 부교수[a.. 더보기
strncpy 함수 Buffer Over Flow(이하 BOF)를 막기위해서 쓰는 함수 中 strncpy 라는 함수가 있다. 하지만 strncpy 함수에서도 취약한 부분이 발생할 수 있다는것을 BOF 원정대 (golem -> darkknight) 문제를 풀면서 공부할 수 있었다. = strncpy 함수에 대한 설명 = #include // C++ 에서는 char * strncpy ( char * destination, const char * source, size_t num ); - 간략한 설명 -문자열에서 일부 문자들 만을 복사한다.source 에서 destination 으로 source 의 처음 num 개의 문자들 만을 복사(NULL 도 포함해서) 한다. num 보다 source 의 문자 수가 더 적다면은 모자란 부분은.. 더보기
Console(콘솔) 데이터의 입력을 담당하는 키보드와 출력을 담당하는 모니터를 총칭하는 단어. 이중에서 키보드를 가리켜 '콘솔 입력 장치'라 하고, 모니터를 가리켜 '콘솔 출력 장치'라 한다. 따라서 데이터를 모니터로 출력하는 printf 함수는 '콘솔 출력 함수'가 되고, 데이터를 키보드로부터 입력 받는 scanf 함수는 '콘솔 입력 함수'가 된다. C언어에는 printf 함수와 scanf 함수 이외에 다양한 콘솔 입출력 함수가 정의되어 있다. 다만 이 두 함수가 대표적은 콘솔 입출력 함수일 뿐이다.[출처] 도서 : 난 정말 C Programming을 공부한 적이 없다구요! (윤성우 지음) 더보기