본문으로 바로가기

post by WHITEHATS

웹기반 정보보안 엔지니어 과정 160309 25번째 강의


1.프로그래밍 언어



1.프로그래밍 언어란?

•프로그래밍 언어
     -사용자가 컴퓨터를 제어하기 위해 지시하는 명령을 컴퓨터가 사용하는 언어 형태로 표현한 것

•프로그래밍 언어 분류
     -고급 언어
          --사람이 사용하는 언어와 가까운 프로그래밍 언어 → 사람 중심적 언어
          --C, C++, C#, Java, Visual Basic, Perl, Python …
      -저급 언어
          -기계어(1,0)와 1:1로 대응되는 언어 → 컴퓨터 중심적 언어
          -어셈블리어 …



1.프로그래밍 언어 구분

•컴파일 언어
     -컴파일 과정을 거쳐서 기계어 코드로 구성된 바이너리 파일(실행파일)을 통해 프로그램을 동작하는 방식의 언어
     -컴파일러
          --명령어 코드를 기계어로 번역하고 실행파일을 생성하는 프로그램
          --사용자 언어 → 컴파일(번역) → Object 파일 → Linking(합침) → 바이너리 파일(실행 파일)
     -복잡한 절차를 가지는 Application 개발에 주로 사용 됨
     -C, C++, C#, Java …

•인터프리터 언어
     -프로그램 실행에 필요한 명령을 한 줄씩 바로 처리하여 인터프리터가 실시간 실행하는 방식
     -인터프리터
          --명령어 코드를 기계어로 번역하는 프로그램
          --명령어 코드를 한 줄씩 번역 함 → 실행속도가 느림
     -소스 컴파일 과정이 필요 없으므로 바로 실행하여 결과를 확인 할 수 있음
          --실시간성이 강조되는 Application 개발에 주로 사용 됨 → WEB Application
     -shell script, batch file, java script, action script, python, rubi, perl, ASP, PHP, JSP, node.js …



1.Application 개발 언어 구분

•절차지향 언어
     -프로그램이 “어떻게(logic)” 동작하는지 정의하는 언어
     -프로그램의 절차(동작 흐름)에 따라 데이터가 이동하는 방식
     -C, Basic, Fortran …

•객체지향 언어
     -프로그램의 절차와 데이터를 정의하여 재사용하는 언어 → 객체
     -C++, C#, Java …



1.C언어

•C언어 역사
     

     -1971년 벨 연구소에서 UNIX의 호환성 문제를 해결하기 위해 개발된 프로그래밍 언어

•C언어 특징
     -절차지향 언어(순서)
     -높은 호환성을 제공 함
          --다양한 종류의 운영체제에서 C언어로 개발된 프로그램이 동작 할 수 있음
     -완성된 프로그램의 크기가 작고 실행속도가 빠름
     -Pointer(메모리의 주소)를 사용 함
     -고급언어 중에서 가장 기계어와 가까운 언어

•C언어 종류
     -ANSI C
          --미국 표준개발기구에서 제정한 C언어(표준) → Windows등 다양한 운영체제 개발환경에서 사용 됨
     -GNU C
          --GNU 프로젝트에 의해 제정된 C언어 → 일반적으로 Linux 개발환경에서 사용 됨



1.GCC Compiler

•Compiler
     -고급언어로 작성된 명령을 저급언어(기계어)로 번역하여 실행파일을 생성하는 프로그램
     -프로그램 개발을 위한 인터페이스 프로그램

•GCC Compiler
     -Linux 환경에서 사용되는 기본 Compiler
     -기본적으로 GNU C 문법으로 compile 동작을 수행 함
     -옵션(-ansi, -pedantic)을 지정하면 ANSI C 문법으로 compile동작을 지원 함
     -기본적으로 compiler의 기능만 지원 함
          -디버깅(debugging) 기능이 지원되지 않음gcc_gdb를 이용하면 디버깅 가능 함

•GCC Compiler
     -gcc, gcc-c++, glibc(GNU C library) 패키지가 필요 함

•Compiler 동작 순서
     -소스코드 생성
          --사람이 이해할 수 있는 언어(자연어)로 프로그램 작성
     -전처리(pre processor)
          --컴파일러가 처음 수행하는 동작
          --include 또는 매크로처럼 축약된 코드를 재해석 함
     -어셈블리 코드 생성
          --컴퓨터가 사용하는 언어의 형태로 해석 함
          --기계어와 1:1로 대응되기 때문에 차후 기계어로 쉽게 변환 됨
     -Object 파일 생성
          --어셈블리로 변역 된 코드를 다시 기계어로 번역한 파일
     -Linker
          --운영체제가 제공하는 여러 가지 기능의 기계어 파일을 연결하여 하나의 실행프로그램 완성

     




2.GNU C 개발 환경 구축



2.GNU C 개발 환경 구축

•개발 환경
     -OS → Linux(Centos 6.7)
     -Compiler → gcc(gcc-c++, glibc)

•gcc 설치
     -yum –y install gcc gcc-c++ glibc
     -gcc 설치 및 버전 확인
          -# gcc --version
     


•source code 관리
     -관리 및 작업 디렉터리 생성
          --# mkdir /c_src
     


•source code 작성
     -vim을 이용 함
     -편리성을 위해 vim의 사용자 환경설정 → vimrc파일 생성
     
     


     




3.기본구조 및 기본 문법



3.C언어 기본 규칙

•C언어 기본 규칙
     -정해진 구조(틀)에 맞춰서 명령을 지정해야 함
     -ASCII 로 정의된 문자만 사용 함
          --기본적으로 영어 소문자로 명령(소스 코드)을 작성 함
          --관습적으로 약속된 상황에서 대문자로 작성 함 → 매크로 이름 등
     -한 동작을 위한 명령의 끝은 반드시 “; (세미콜론)”을 지정해야 함;
     -“{ }”를 이용하여 특정 명령의 수행 영역을 지정 함
     -절차적으로 명령을 수행 함
          --가장 첫 줄의 명령부터 한 줄씩 순차적으로 명령을 수행 함 → 순서가 중요 함
          --실행 흐름을 변경하기 위해 제어문을 사용 함
     -하나의 프로그램은 main의 시작부터 끝까지 임
          --main이 아닌 함수를 부르면(호출) 바로 해당 함수를 찾아가서 명령을 처리하고 원래의 위치로 돌아옴
     -가독성을 높이기 위해 들여쓰기를 함
     -특정 기능을 수행하기 위한 명령(코드)에 설명(주석)을 붙임

•주석
     -프로그램 내부에 입력되지만 명령으로 처리되지 않음
     




3.C언어 기본 규칙
     
•C언어 기본 규칙
     -일반 텍스트 파일을 이용하여 C언어 문법대로 명령(소스 코드) 지정
     -프로그램의 가독성을 위해 최상위에 주석으로 “프로그램 이름, 개발 날짜, 개발자"를 명시 함
     




3.C 프로그램의 기본 구조

     







3.함수 (function)

•함수
     -특정 기능을 수행하기 위한 명령의 집합
     -data를 입력 받아서 기능을 수행한 후 결과를 출력 함

•함수 종류
     -표준 함수
          --자주 사용되는 기능들이 미리 정의되어 있는 프로그램
     -사용자 정의 함수
          --사용자의 필요에 따라 특정 기능을 수행할 수 있는 하나의프로그램
     -헤더 파일
          --소스코드/object/binary 파일로 미리 코드가 정의되어 있는 함수가 저장되어 있는 파일

•gcc 헤더파일 위치
     -/usr/include
     -헤더 파일을 “<>”로 묶어서 지정하면 표준 include 디렉터리(/usr/include)에서 헤더파일을 찾음
     -헤더 파일을 다른 경로로 지정
          --# gcc –l(소문자) [헤더파일의 디렉터리] -o test test.c

     




3.함수의 기본 구조

•입력부
     -함수가 동작할 때 필요한 입력 데이터를 전달받는 부분
     -외부 프로그램 또는 외부 함수로부터 입력 데이터를 전달 받음

•처리부
     -함수가 수행해야 되는 명령(코드)이 순차적으로 나열되는 부분
     -기능 수행

•출력부
     -처리부의 명령이 수행된 결과를 반환하는 부분
     -정상/비정상 종료 또는 다음 명령 처리를 위해 필요한 값 반환
     -출력부 명령이 동작하면 프로그램의 실행흐름은 해당 함수의 종료 위치로 이동 함

     






3.함수의 기본 구조

•자료형
     -반환값의 데이터 종류

•함수명
     -함수를 식별할 때 사용할 이름

•매개변수
     -함수가 실행될 때 입력된 데이터를 저장할 공간

•함수의 몸체
     -함수가 수행해야 하는 기능을 위한 명령(코드)이 순차적으로 나열되는 부분

     





아무 오류 로그가 없으면 정상적으로 만들어진 것임.


운영체제에 bin또는 sbin에 등록되지 않아서 절대경로나 상대경로로 실행시켜야 된다!




4.입출력 제어



4.스트림 (Stream)

•표준 스트림(Stream)
     -프로그램과 하드웨어를 연결하는 데이터의 입/출력 통로
     -데이터를 버퍼(임시 저장공간)에 저장하였다가 일정 시점에 전달 함

•표준 입력(stdin)
     -표준 입력도구(키보드)를 통해 입력된데이터를 프로그램으로 전달
     -대표 함수 → scanf( ), getch( ), gets( ) …

•표준 출력(stdout)
     -표준 출력도구(모니터)로 프로그램의 처리결과 데이터를 전달
     -대표 함수 → printf( ), puts( ) …

•표준 에러(stderr)
     -프로그램의 입/출력 에러 및 명령 수행의 에러값을 표준 출력도구로 전달

     




4.표준 출력

•printf( ) 함수
     -표준 출력 함수
     -프로그램의 명령(코드)이 수행된 결과를 표준 출력 함
     -더블 쿼테이션(“ “)사이의 지정된 형식의 데이터를 모니터로 출력하는 함수

•헤더 파일
     -stdio.h

•함수의 기본 형태
     


•예제
     -printf(“Hello World!!”);
     -printf(“ %d + %d = %d “, 1, 2, 3);
     -printf(“ %s의 나이는 %d 입니다.\n”, name, age);



4.print() 예제








4.표준출력

•Escape 문자
     -C언어에서 정의한 메타문자
     -“\” 문자로 시작 됨
     -특정 기능에 대한 구분을 위해 단일문자를 식별자로 사용 함
     




3.자료형 (data type)

•자료형
     -데이터의 종류를 구분하기 위해 범위, 부호의 사용여부 등을 정의해 놓은 것
     




3.제어문자

•진수
     -지정된 방식으로 수를 표현하는 방법
     


•진수 변경
     -8진수 → 한 자리 값이 3bit로 표현 됨
     -16진수 → 한 자리의 값이 4bit로 표현 됨



3.제어문자

•서식 제어 문자
     -표준 입력 또는 표준 출력을 수행 할 때 데이터의 형식을 지정하는 문자
     -“%” 문자로 시작 됨
     -특정 기능에 대한 구분을 위해 단일문자를 식별자로 사용 함
     

     float a = 1.2
     printf("%0.1f ", a);
     하면 소수점 첫째자리까지만 나옴 0.2로 바꾸면 2번째 자리까지만 나옴!

     printf("%c", 'a');
     단일문자 쓸때는 싱글쿼터로 꼭 묶어준다!
     여러문자 쓸때는 더블쿼터로..
     printf("%c", "aaa");  ?
     -> a      a만 나온다!
     a 3개 다나오게 하려면
     printf("%s", "aaa");
     -> aaa
     "aaa(\0)" aaa뒤에는 널문자 숨겨져 있음을 기억!

     

하얀모자의 정보보안 whitehats


'▶ 웹기반 정보보안 과정 > Programming' 카테고리의 다른 글

160316 30번째 강의  (0) 2016.03.20
160315 29번째 강의  (0) 2016.03.19
160312 28번째 강의  (0) 2016.03.16
160311 27번째 강의  (0) 2016.03.16
160310 26번째 강의  (0) 2016.03.16

}